ember.js - 用户会话

时间:2014-12-03 13:22:53

标签: 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'),
 gender: DS.attr('string'),
 city: DS.attr('string'),
 state: DS.attr('string'),
 email: DS.attr('string')
});

如何创建此用户会话以及如何访问“当前用户”#39;在我申请的其余部分?

---编辑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'所以在我的环境中。我有:

 ENV['simple-auth'] = {
  authenticationRoute: 'users.login'
 };

在登录后的页面上,我试图查看currentUser对象是否已保留,以便我注销此行:

console.log('CURRENT USER: ' + self.get('session.currentUser'));

但我没有定义会话,但是不应该在全局访问会话变量吗? 我也试过console.log('CURRENT USER: ' + self.get('initializers.session.currentUser')); 但是未定义。

1 个答案:

答案 0 :(得分:1)

我建议您延长它,而不是重新开放Session

以下是我的解决方案:

// 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
};

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