Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ember.js中使用Ember Simple Auth设置管理视图_Ember.js - Fatal编程技术网

在Ember.js中使用Ember Simple Auth设置管理视图

在Ember.js中使用Ember Simple Auth设置管理视图,ember.js,Ember.js,我是Ember.js的新手,我正在使用Ember Simple Auth,我很难弄清楚如何获取当前登录的用户,然后检查该用户是否是管理员,这样我就可以在模板中显示管理员。目前我使用的是jwt身份验证,使用的是Ember Simple Auth令牌和Ruby on Rails后端。如果能帮我指出正确的方向,那就太好了 我目前已经尝试让Ember Simple Auth上的示例正常工作 当用户进行身份验证时,jwt将返回令牌和用户id。问题是,当用户登录时,我无法获取该用户的名称或任何详细信息 我

我是Ember.js的新手,我正在使用Ember Simple Auth,我很难弄清楚如何获取当前登录的用户,然后检查该用户是否是管理员,这样我就可以在模板中显示管理员。目前我使用的是jwt身份验证,使用的是Ember Simple Auth令牌和Ruby on Rails后端。如果能帮我指出正确的方向,那就太好了

我目前已经尝试让Ember Simple Auth上的示例正常工作

当用户进行身份验证时,jwt将返回令牌和用户id。问题是,当用户登录时,我无法获取该用户的名称或任何详细信息

我正试图通过这样做来访问当前用户(这可能是错误的)

{{currentUser.user.name}} 
controller/application.js

import Ember from 'ember';

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

export default Ember.Controller.extend({
  session:     service('session'),
  currentUser: service('current-user')
});
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().catch(() => this.get('session').invalidate());
  },

  _loadCurrentUser() {
    return this.get('currentUser').load();
  }
});
routes/application.js

import Ember from 'ember';

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

export default Ember.Controller.extend({
  session:     service('session'),
  currentUser: service('current-user')
});
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().catch(() => this.get('session').invalidate());
  },

  _loadCurrentUser() {
    return this.get('currentUser').load();
  }
});
服务/current-user.js

import Ember from 'ember';

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

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

  load() {
    return new RSVP.Promise((resolve, reject) => {
      let userId = this.get('session.data.authenticated.user_id');
      if (!isEmpty(userId)) {
        return this.get('store').find('user', userId).then((user) => {
          this.set('user', user);
        }, reject);
      } else {
        resolve();
      }
    });
  }
});

您需要调用
findRecord

load() {
    return new RSVP.Promise((resolve, reject) => {
      let userId = this.get('session.data.authenticated.user_id');
      if (!isEmpty(userId)) {
        return this.get('store').findRecord('user', userId).then((user) => {
          this.set('user', user);
          resolve();
        }, reject);
      } else {
        resolve();
      }
    });
  }

您需要调用
findRecord

load() {
    return new RSVP.Promise((resolve, reject) => {
      let userId = this.get('session.data.authenticated.user_id');
      if (!isEmpty(userId)) {
        return this.get('store').findRecord('user', userId).then((user) => {
          this.set('user', user);
          resolve();
        }, reject);
      } else {
        resolve();
      }
    });
  }

欧空局的文件非常丰富。你尝试了什么?问题出在哪里?我已经用我使用的示例和当前使用的代码更新了帖子。ESA文档非常丰富。你尝试了什么?问题是什么?我已经用我使用的示例和当前使用的代码更新了帖子。看起来这也没有解决问题。如果有帮助,Ember Inspector将显示用户未加载到用户模型中。但是为了更好地理解它是如何工作的,它发送了与令牌一起发送的id,并发送了一个GET to/users/:id?@MattBrowning是的,就是这样。您需要调用
,然后在
\u loadCurrentUser
中调用
,以触发从后端获取用户。为了进一步检查
session.data.authenticated.user\u id
是否有值,看起来这也不能解决问题。如果有帮助,Ember Inspector将显示用户未加载到用户模型中。但是为了更好地理解它是如何工作的,它发送了与令牌一起发送的id,并发送了一个GET to/users/:id?@MattBrowning是的,就是这样。您需要调用
,然后在
\u loadCurrentUser
中调用
,以触发从后端获取用户。并进一步检查
session.data.authenticated.user\u id
是否有值