如何在EmberJS中的页面重新加载中保留当前登录的用户详细信息?

时间:2016-05-11 18:22:17

标签: ember.js ember-simple-auth

我使用ember-simple-auth来管理我的ember应用中的身份验证。

插件提供了一个session库,当我使用令牌认证登录时,它显然存储了来自API服务器的响应。响应包含典型的oAuth2响应,如访问令牌,刷新令牌,到期时间等。库提供了一个布尔变量,用于指示用户当前是否已经过身份验证。

我使用一个实例初始化器,它使用这个布尔变量来获取和存储当前用户的详细信息。代码如下所示:

// app/instance-initializers/current-user.js
import Session from "ember-simple-auth/services/session";
export default {
  name: "current-user",
  before: "ember-simple-auth",
  initialize: function(container) {
    Session.reopen({
      setCurrentUser: function() {
        if (this.get('isAuthenticated')) {
          container.lookup("service:store").find('user', 'me').then((user) => {
            this.set('currentUser', user);
          });
        }
      }.observes('isAuthenticated')
    });
  }
};

当我登录并浏览应用程序中的不同路线时,此功能正常。当我重新加载一些页面时出现问题。当前用户详细信息以某种方式被删除,并且此setCurrentUser也被调用,但在调用当前路由中的所有挂钩后调用它。因此,在modelbeforeModelsetupControllersession.currentUser等挂钩中,未设置ng-repat="sub in subDomains",只有在调用所有这些挂钩后才设置它。

如何避免这种情况?如何在页面重新加载的路由挂钩中提供当前用户详细信息?

1 个答案:

答案 0 :(得分:0)

新答案

暂时完全忽略以下答案。尝试将初始化程序更改为仅在ember-simple-auth之后触发,如下所示:

SizeToContent="WidthAndHeight" 

查看文档的this part,有关初始化程序的更多信息,如果您使用以下路径mixin,请告诉我们:

// app/instance-initializers/current-user.js
import Session from "ember-simple-auth/services/session";
export default {
  name: "current-user",
  after: "ember-simple-auth",

上一个答案

我建议您仔细阅读自述文件中的session stores,然后尝试暂时在会话存储之间切换,看看是否能解决您的问题。否则,使用本地存储实现您自己的自定义会话存储,以确保持久性和存储性。恢复挂钩工作就像预期的那样。

在这种情况下,您将扩展的对象如下所示(从自述文件中复制):

import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin';