Ember CLI-在路由中注入服务并使用ember-simple-auth获取当前用户

吉德雷克

我正在使用ember-simple-auth进行身份验证。我创建了服务来获取当前用户。

//services/session.js
import Ember from 'ember';
import ESASession from "ember-simple-auth/services/session";

 export default ESASession.extend({

  store: Ember.inject.service(),

  setCurrentUser: function() {
    if (this.get('isAuthenticated')) {
      let user_id = this.get('session.content.authenticated.user_id');
      this.get('store').findRecord('user', user_id).then((user) => {
        this.set('currentUser', user);
      });
    }
  }.observes('isAuthenticated')
 });

在控制器中,当我注入会话时

//controller/application.js
import Ember from 'ember';

export default Ember.Controller.extend({
  auth: Ember.inject.service('session'), 

  actions: {

    save() {
       var current_user = this.get('auth.currentUser');
       console.log(current_user) // I got the current user model
    }
  }
});

但是,当我尝试在路由中使用相同名称时,我的current_user未定义

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

export default Ember.Route.extend(ApplicationRouteMixin, {
  auth: Ember.inject.service('session'),

  model() {
    console.log(this.get('auth.currentUser')); // I got undefined
  }
 });

我需要获取当前用户,因为我想知道该用户是否具有is_admin标志,例如

afterModel: function(model, transition) {
    if (model.is_admin) {
        this.transitionTo('admin');
     }
}

在路由中注入会话的最佳方法是什么?我做错了什么?

吉德雷克

我必须更改会话服务

//services/session.js
import Ember from 'ember';
import DS from 'ember-data';
import SessionService from "ember-simple-auth/services/session";

export default SessionService.extend({

  store: Ember.inject.service(),

  account: Ember.computed('session.content.authenticated.user_id', function() {
    const user_id =  this.get('session.content.authenticated.user_id');
    if (!Ember.isEmpty(user_id)) {
      return DS.PromiseObject.create({
        promise: this.get('store').findRecord('user', user_id)
      });
    }
  })
});

现在,我可以在路线中使用它了;例如,如果我要重定向,如果用户具有第一个登录标志

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

export default Ember.Route.extend(ApplicationRouteMixin, {

  session: Ember.inject.service(),

  sessionAuthenticated() {
    var applicationRouteInstance = this;
    this.get('session.account').then(function(user){
        if (user.get('is_first_login')) {
          applicationRouteInstance.transitionTo('users/password-reset');
        } else {
          applicationRouteInstance.transitionTo('dashboard');
        }
      });
   }

});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章