2015-05-11 40 views
4

我有一个使用ember-cli生成的EmberJS应用程序。我目前正在使用simple-auth和自定义身份验证器。我应该如何在EmberJS中存储当前的用户详细信息?

在身份验证器中,当用户登录时,我想保存他的详细信息以便稍后使用它。 我有以下代码:

authenticate: function(options) { 
    var self = this; 
    return new Ember.RSVP.Promise(function(resolve, reject){ 
    API.user.login(options.username, options.password, true).done(function(data) { 
     // @TODO: Save current user 
     resolve(data.id); 
    }).fail(function() { 
     reject(); 
    }); 
    }); 
}, 

用户数据是在可变data.user可用。

我试过使用Ember.set('App.currentUser', data.user);但它不工作。我该怎么办?

回答

0

我最终创建了一个自定义的Sessions控制器,并在那里设置当前用户对象,然后从该对象创建一个别名应用控制器。

像什么在this article.

1

我认为它最容易使用初始化。那里有几种方法可以解决用户,我想如果你从API传递USER_EMAIL旁边的同意令牌

//initializers/session-user.js 

import Ember from "ember"; 
import Session from "simple-auth/session"; 
export function initialize(container) { 
    Session.reopen({ 
    setCurrentUser: function() { 
     var accessToken = this.get('access_token'); 
     var self = this; 
     if (!Ember.isEmpty(accessToken)) { 
      return container.lookup('store:main').find('user', { 
      email: self.get('user_email') 
      }).then(function (users){ 
      self.set('currentUser', users.get('firstObject')); 
      }); 
     } 
     }.observes('access_token') 
    }); 
} 

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

检查这个线程,其中的这个想法来自它是最简单的:http://discuss.emberjs.com/t/best-practice-for-loading-and-persisting-current-user-in-an-authenticated-system/6987

如果你正在使用simple-auth> 0.8.0-beta.1,你将需要调整初始化程序

+0

听起来不错,但有一个问题。我已经从登录API获取用户对象。有没有办法从authenticator访问'Session'对象? – Louy

相关问题