【问题标题】:Ember-simple-auth cant get currentUser after reloadEmber-simple-auth 重新加载后无法获取 currentUser
【发布时间】:2017-07-02 10:47:32
【问题描述】:

我有一个简单的 Ember 应用程序 (repo),使用 ember-simple-auth 进行身份验证(我关注了这篇文章 https://medium.com/@benhansen/token-based-authentication-with-jwt-ember-and-rails-af54b03fe237)。登录后,我可以访问我的路由、控制器和模板中的 currentUser。但是,如果我导航到 ApplicationRoute 之外的任何路由并重新加载浏览器,我将无法再访问该路由中的 currentUser,但它在模板中可用。如果我导航回应用程序路径并再次导航到不同的路径,那么我可以访问 currentUser。我该如何解决这个问题,即即使在重新加载后我也希望能够在任何路由中访问 c​​urrentUser?

应用程序路由:

import Ember from 'ember';
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin';

export default Ember.Route.extend(ApplicationRouteMixin, {
  sessionAccount: Ember.inject.service(),
  beforeModel() {
    this.get('sessionAccount').loadCurrentUser();
  }
});

SessionAccount 服务:

import Ember from 'ember';

const { inject: { service }, RSVP } = Ember;

export default Ember.Service.extend({
  session: service('session'),
  store: service(),


  loadCurrentUser() {
    if (this.get('session.isAuthenticated')) {
      this.get('store')
      .queryRecord('user', { me: true })
      .then((user) => {
        this.set('currentUser', user);
      });
    } else {
      return RSVP.resolve();
    }
  }
});

预订路线 - “其他”路线:

import Ember from 'ember';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(AuthenticatedRouteMixin, {
  sessionAccount: Ember.inject.service(),

  model() {
    const currentUser = this.get('sessionAccount.currentUser');

    return this.get('store').query('booking', {
      filter: {
        'user_id': currentUser.id
      },
      include: 'rental,rental.rental-ratings'
    });
  }
});

【问题讨论】:

    标签: ember.js ember-simple-auth


    【解决方案1】:

    tutorial 表单 Ember 简单身份验证 github 存储库之后结束。谁会想到这会起作用:) 不得不更改 app/routes/application.js 中的代码,还将我的服务名称从“sessionAccount”更改为“currentUser”:

    // app/routes/application.js
    import Ember from 'ember';
    import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin';
    
    const { service } = Ember.inject;
    
    export default Ember.Route.extend(ApplicationRouteMixin, {
      currentUser: service(),
    
      beforeModel() {
        return this._loadCurrentUser();
      },
    
      sessionAuthenticated() {
        this._super(...arguments);
        this._loadCurrentUser();
      },
    
      _loadCurrentUser() {
        return this.get('currentUser').load().catch(() => this.get('session').invalidate());
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2015-02-09
      相关资源
      最近更新 更多