gpt4 book ai didi

ember.js - 刷新页面后 ember-simple-auth session.isAuthenticated 为 false

转载 作者:行者123 更新时间:2023-12-03 04:27:45 25 4
gpt4 key购买 nike

我正在使用 ember-simple-auth 和基于 Cookie 的身份验证。当我登录时,{{session.isAuthenticated}}为true,但是当我重新加载页面时,这是FALSE,但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 注入(inject)应用程序 Controller 中:

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

最佳答案

你犯了一个错误。每次我们刷新页面或打开另一个选项卡时都会调用“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);
});
},

请注意,这个“恢复”方法就像我们必须根据我们的站点规则覆盖的方法,例如,如果您有 token 身份验证,我们会将此方法编写为

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

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

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

关于ember.js - 刷新页面后 ember-simple-auth session.isAuthenticated 为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46771256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com