【问题标题】:ember-simple-auth session.isAuthenticated is false after refresh pageember-simple-auth session.isAuthenticated 刷新页面后为假
【发布时间】:2018-03-28 00:43:33
【问题描述】:

我正在使用带有基于 Cookie 的身份验证的 ember-simple-auth。 当我登录时 {{session.isAuthenticated}} 是真的,但是当我重新加载页面时这是假的,但是 localStore 没有改变。

这是我的 custom.js 身份验证器:

import Base from 'ember-simple-auth/authenticators/base';
import config from '../config/environment';

export default Base.extend({
    tokenEndpoint: config.apiUrl + '/user/signIn',
    restore(data) {      
      console.log(data);
      return RSVP.resolve(data);
    },
    authenticate(username, password) {
      return Ember.$.ajax({
          url: this.tokenEndpoint,
          type: 'POST',
          data: JSON.stringify({
            username: username,
            password: password,
          }),
          contentType: 'application/json;charset=utf-8',
          dataType: 'json',
      });

    },
    invalidate: function () {
      return Ember.RSVP.resolve();
    },
  });

我在 application.hbs 中使用 {{session.isAuthenticated}}。所以我在应用程序控制器中注入会话:

session: Ember.inject.service('session')

【问题讨论】:

  • 这是我在 localStorage 中所拥有的: ember_simple_auth-session : "{"authenticated":{"authenticator":"authenticator:custom","item":{"username":"admin@a .com"}}}"

标签: ember.js ember-simple-auth


【解决方案1】:

你犯了一个错误。每次我们刷新页面或打开另一个选项卡时都会调用“restore”方法。请注意,RSVP.resolve 会删除您的本地存储,因此所有内容都未经身份验证。我们在想要注销用户时使用它,这意味着 Ember Simple Auth 将删除其本地存储 cookie,当找不到此 cookie 时,它​​总是为 isAuthenticated 方法发送 false。

RSVP.resolve(data);

从此更改您的恢复功能

restore(data) {      
  console.log(data);
  return RSVP.resolve(data);
},

到这里

restore(data) { 
    return new Promise((resolve, reject) => {
      resolve(data);
    });
},

请注意,此“恢复”方法类似于我们必须根据我们的站点规则覆盖的方法,例如,如果您有令牌身份验证,我们将将此方法编写为

restore(data) {
  return new Promise((resolve, reject) => {
    if (!Ember.isEmpty(data.token)) {
      console.log(data);
      resolve(data);
    } else {
      reject();
    }
});
},

请注意,我们如何使用自己的逻辑来处理事情,以查看 localstorage 中是否存在 token 属性。

类似地,我们可以在这个方法中获取会话 cookie 并检查它是否存在。如果它存在,那么我们解决否则我们拒绝。请注意,这些 resolve 和 reject 是 promise 方法等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多