我正在使用基于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')
发布于 2018-05-30 17:03:23
你在犯一个错误。每次刷新页面或打开另一个选项卡时,都会调用“'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‘方法类似于一个方法,我们必须根据我们的站点规则覆盖它,例如,如果你有令牌身份验证,我们将把这个方法写成
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方法等。
https://stackoverflow.com/questions/46771256
复制相似问题