Session ember.js-用户会话

Session ember.js-用户会话,session,ember.js,model,Session,Ember.js,Model,我有一个用户可以登录或注册的应用程序。在这两个操作之后,我想创建一个用户会话,让应用程序的其余部分访问,直到窗口关闭。我使用的用户模型如下所示: export default DS.Model.extend({ apiKey: DS.attr('string'), userId: DS.attr('integer'), firstName: DS.attr('string'), lastName: DS.attr('string'), birthday: DS.attr('date')

我有一个用户可以登录或注册的应用程序。在这两个操作之后,我想创建一个用户会话,让应用程序的其余部分访问,直到窗口关闭。我使用的用户模型如下所示:

export default DS.Model.extend({
 apiKey: DS.attr('string'),
 userId: DS.attr('integer'),
 firstName: DS.attr('string'),
 lastName: DS.attr('string'),
 birthday: DS.attr('date'),
 gender: DS.attr('string'),
 city: DS.attr('string'),
 state: DS.attr('string'),
 email: DS.attr('string')
});
如何创建此用户会话以及如何访问应用程序其余部分中的“当前用户”

---编辑1---

我已经安装了ember simple auth,并且有一个初始值设定项,如下所示:

export default {
 name: 'session',
 before: 'simple-auth',

 initialize: function(container) {
    Session.reopen({
        currentUser: function() {
            var user_id = this.get('userId');
            if (!Ember.isEmpty(user_id)) {
                return container.lookup('store:main').find('user', user_id);
            }
        }.property('user_id')
    });
 }
};
我的登录路径是“users.login”,因此在My environment.js中我有:

 ENV['simple-auth'] = {
  authenticationRoute: 'users.login'
 };
在登录后的页面上,我尝试查看currentUser对象是否已持久化,因此我将注销此行:

console.log('CURRENT USER: ' + self.get('session.currentUser'));
但我发现会话并没有定义,但会话变量不应该是全局可访问的吗? 我还尝试了
console.log('CURRENT USER:'+self.get('initializers.session.currentUser')

但是不要定义。

我建议您扩展它,而不要重新打开
会话

以下是我为您提供的解决方案:

// objects/my-session.js
import Ember from 'ember';
import Session from 'simple-auth/session';

export default Session.extend({
  user: function() {
    var userId = this.get('user_id');
    if (!Ember.isEmpty(userId)) {
      return this.container.lookup('store:main').find('user', userId);
    }
  }.property('user_id')
});

// initializers/my-authentication.js
import MySession from '../objects/my-session';

export var initialize = function(container) {
  container.register('session:custom', MySession);
};

export default {
  name: 'authentication',
  before: 'simple-auth',
  initialize: initialize
};

您的验证者和授权者也是自定义的吗

我强烈建议您在github中查看ember simple auth repo。所以我决定使用ember simple auth,我遇到了麻烦。我将它作为附加组件安装到我的项目中,并设置了一个初始值设定项来设置currentUser<代码>导出默认值{name:'session',在:'simple auth'之前,初始化:函数(容器){session.reopen({currentUser:function(){var user\u id=this.get('user\u id');if(!Ember.isEmpty(user\u id)){返回容器。查找('store:main')。查找('user',userId);}}.property('user_id')});}self.get('session.currentUser')
我已经用更多的细节编辑了我的初始问题。您还可以将自定义会话调整到
app/sessions/custom
-这样,Ember CLI将在容器中自动将其注册为
'session:custom'
。是否有我可以使用的默认身份验证程序和授权程序?还有,既然所有这些代码都准备好了,我如何访问我所有控制器/路由中的会话变量呢?当我输出“session”时,它会注销:
Class{store:Class,uu ember141770684622:“ember251”,u nextSuper:undefined,uu ember\u meta:Object,constructor:function…}\uu ember141770684622:“ember251”__ember\u meta\uuuuu:Object\uuuu nextSuper:undefinedstore:Class\uuuu proto\uuuuuu:Class
-但没有当前用户/用户ID的迹象。。。