【问题标题】:Ember cli error with ember-simple-authEmber cli 错误与 ember-simple-auth
【发布时间】:2015-01-14 16:03:20
【问题描述】:

我正在尝试将 ember-simple-auth 与自定义会话一起使用。登录后,当我尝试在模板中访问会话时,如下所示:

{{session.current_user.email}}

我收到以下错误:

Uncaught Error: Assertion Failed: Required contextualElement for view <Ember._HandlebarsBoundView:ember375> is missing

如果我重新加载页面,错误就会消失。此外,如果我使用未绑定的助手,它就会消失:

{{unbound session.current_user.email}}

当 user_id 改变时,我有以下代码来设置 current_user:

import Session from 'simple-auth/session';
import Ember from 'ember';

export function initialize(container) {
  Session.reopen({
    setCurrentUser: function() {
      var id = this.get('user_id');
      var _this = this;
      if(!Ember.isEmpty(id)) {
        return container.lookup('store:main').find('user', id).then(function(user){
          _this.set('current_user', user);
        });
      }
    }.observes('user_id')
  });
}

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

我做错了什么?

编辑#1:

我应该把这段代码放在哪里?初始化器? app/sessions/custom.js?

export default 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')
});

然后在我设置的environment.js中:

ENV['simple-auth'] = {
  session: 'session:custom'
}

并在初始化程序中注册自定义会话?

container.register('session:custom', Session);

编辑#2:

将自定义会话移至 sessions/custom.js。还是一样的错误:

【问题讨论】:

    标签: javascript ember.js ember-cli ember-simple-auth


    【解决方案1】:

    我会在 Session 上定义一个 currentUser 方法,将用户作为承诺返回:

    export default 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')
    });
    

    此外,您最好定义自己的客户会话类,该类从 Ember Simple Auth Session 类扩展而来,而不是重新打开它。

    【讨论】:

    • 原始问题,显然无法在评论中获取代码格式。
    • 您将会话放入 app/sessions/custom.js,如果您使用的是最新的 Ember CLI,则无需将其注册到容器 - 只需配置 ENV['simple-auth'].session = 'session:custom'
    • 感谢您到目前为止的帮助。简化了我的很多代码。虽然仍然相同的错误消息。见编辑#2。在模板中访问会话是否有一些特殊规则?
    • 嗯,实际上应该这样工作,请参阅此处的示例:github.com/simplabs/ember-simple-auth/blob/master/examples/…。您使用的是哪个版本的 Ember、Ember Data 等?
    【解决方案2】:

    类似于marcoow所说的,但我们使用的是promise对象:

    app/initializers/simple-auth-session.js

    import Session from 'simple-auth/session';
    import DS from 'ember-data';
    
    export default {
      name: 'simple-auth-custom-session',
      before: 'simple-auth',
      initialize: function(container) {
        Session.reopen({
          currentUser: function() {
            return DS.PromiseObject.create({
              promise: container.lookup('store:main').find('user', 'me')
            });
          }.property()
        });
      }
    };
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多