首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新页面后,ember-simple-auth session.isAuthenticated为假

刷新页面后,ember-simple-auth session.isAuthenticated为假
EN

Stack Overflow用户
提问于 2017-10-16 21:13:56
回答 1查看 584关注 0票数 2

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

这是我的custom.js验证器:

代码语言:javascript
复制
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}}。因此,我在应用程序控制器中注入会话:

代码语言:javascript
复制
session: Ember.inject.service('session')

EN

回答 1

Stack Overflow用户

发布于 2018-05-30 17:03:23

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

代码语言:javascript
复制
RSVP.resolve(data);

从这里更改您的恢复功能

代码语言:javascript
复制
restore(data) {      
  console.log(data);
  return RSVP.resolve(data);
},

到这个

代码语言:javascript
复制
restore(data) { 
    return new Promise((resolve, reject) => {
      resolve(data);
    });
},

请注意,这个'restore‘方法类似于一个方法,我们必须根据我们的站点规则覆盖它,例如,如果你有令牌身份验证,我们将把这个方法写成

代码语言:javascript
复制
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方法等。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46771256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档