【问题标题】:Ember Simple Auth custom authenticatorEmber Simple Auth 自定义身份验证器
【发布时间】:2014-08-14 00:48:51
【问题描述】:

我一直在尝试使用idemailpoints 属性创建session.currentUser 属性。

我引用了 Custom authenticator with Ember simple auth + Ember CLIHow to store the user in a session,但我就是不知道这些部分是如何组合在一起的。

我正在使用 Ember CLI。在我的index.html 中,我有:

window.ENV['simple-auth'] = {
  authorizer: 'simple-auth-authorizer:devise',
  session: 'session:custom'
};

initializers/custom-session.js,我有:

import Session from 'simple-auth/session';
import Devise from 'simple-auth-devise/authenticators/devise';

export default {
  name: 'session:custom',
  before: 'simple-auth',
  initialize: function(container) {
    container.register('session:custom', Devise);
    Session.extend({
      currentUser: function() {
        var id = this.get('id');
        var email: this.get('user_email');
        var points: this.get('points');

        if (!Ember.isEmpty(id)) {
          return this.store.createRecord('user', {
            id: id,
            email: email,
            points: points
          });
        }
      }.property('id')
    });
  }
};

这在很多方面对我来说都是错误的,但经过几个小时的努力,这至少表明我正在努力完成什么。

如果能提供任何帮助,我将不胜感激。提前谢谢!

【问题讨论】:

    标签: ember.js ember-simple-auth


    【解决方案1】:

    我明白了!!! :)

    index.html:

    window.ENV['simple-auth'] = {
      authorizer: 'simple-auth-authorizer:devise',
      session: 'session:withCurrentUser'
    };
    

    初始化程序/customize-session.js:

    import Session from 'simple-auth/session';
    
    var SessionWithCurrentUser = Session.extend({
      currentUser: function() {
        var userId = this.get('user_id');
        if (!Ember.isEmpty(userId)) {
          return this.container.lookup('store:main').find('user', userId);
        }
      }.property('user_id')
    });
    
    export default {
      name: 'customize-session',
      initialize: function(container) {
        container.register('session:withCurrentUser', SessionWithCurrentUser);
      }
    };
    

    希望这对其他人有所帮助。

    【讨论】:

    • 我的解决方案看起来和你的几乎一模一样。唯一的区别是(如果您使用的是 ember-cli)是我将自定义会话的配置放在 config/environment.js 中。
    • 感谢您发布此信息!你能告诉我你是在模型中明确定义了 userId 还是只是从 api 自动获取的常规 id?我有一个 rails devise api,它似乎并没有只用这段代码来吸引用户,你对控制器、路由有什么特别的想法吗?或者你有没有像简单的 auth devise 文档中描述的那样?
    • @Coherent 已经有一段时间了,我无法再访问该代码,但我相信 this.get('user_id') 是您从 Simple Auth 获取 ID 的方式。然后,您使用它通过其常规的旧 id 属性找到 user。我认为没有其他配置。
    • 谢谢,感谢您的回复。我知道您无权访问它,但您是否知道 rails 路由的样子?你刚才说devise_for :users, controllers: { sessions: 'sessions' },然后在下一行resources :users
    • @Coherent 我相信是这样。实际上,我在Ember Simple Auth Devise README 上创建了一个 PR,以根据我的经验充实说明,因此,如果您按照自述文件进行操作,您应该会获得与我的非常相似的设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多