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