EmberJS 从 ember-simple-auth 验证器中检索当前用户
EmberJS retrieve current user from ember-simple-auth authenticator
问题:
我正在尝试通过扩展 ember-simple-auth/authenticators/base
来检索从 ember-simple-auth 登录的当前用户。我只想创建一个名为 currentUser()
的函数,它将 return 用户名但是每当我尝试调用该函数时我都会收到错误消息:
Uncaught TypeError: this.get(...).currentUser is not a function(…)
尝试:
函数currentUser()
定义如下:
// app/authenticators/oauth2.js
import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';
const RSVP = Ember.RSVP;
export default Base.extend({
restore() {
// restore user session
},
currentUser() {
return this.get("username");
}),
authenticate(username, password) {
this.set('username', username);
return new RSVP.Promise((resolve, reject) => {
Ember.$.ajax({
url: config.baseURL + "accounts/login",
data: {
username: username,
password: password
},
type: 'POST',
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
complete: (response)=> {
if (response.responseJSON.isAuthenticated)
resolve({isAuthenticated: true});
else
reject("Wrong credentials.");
}
});
});
},
invalidate() {
// log out
}
});
我调用函数使用:
// app/controllers/application.js
import Ember from 'ember';
export default Ember.Controller.extend({
session: Ember.inject.service('session'),
actions: {
alertSession() {
console.log("!! " + this.get('session').currentUser());
},
invalidateSession() {
this.get('session').invalidate();
this.transitionToRoute('login');
}
}
});
this.get('session').invalidate();
有效,但this.get('session').currentUser();
会return出现上述错误。
请让我知道如何解决这个问题。
另外,我正在使用 Ember 2.5.1.
谢谢!
在您的应用程序控制器中,您从 session 服务调用 currentUser()
,而您在 中定义了 currentUser()
oauth2.js 验证器。执行可能会失败,因为您没有修改 session 服务以引用您的身份验证器的 currentUser
函数。
另一个函数成功执行,因为 session 服务具有调用指定身份验证器的 invalidate()
函数所需的引用。
您可以考虑使用 ember-simple-auth 对 Managing a Current User 的建议。有了这个,您可以探索一个解决方案,该解决方案利用与 session 服务一起工作的隔离 currentUser 服务。
问题:
我正在尝试通过扩展 ember-simple-auth/authenticators/base
来检索从 ember-simple-auth 登录的当前用户。我只想创建一个名为 currentUser()
的函数,它将 return 用户名但是每当我尝试调用该函数时我都会收到错误消息:
Uncaught TypeError: this.get(...).currentUser is not a function(…)
尝试:
函数currentUser()
定义如下:
// app/authenticators/oauth2.js
import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';
const RSVP = Ember.RSVP;
export default Base.extend({
restore() {
// restore user session
},
currentUser() {
return this.get("username");
}),
authenticate(username, password) {
this.set('username', username);
return new RSVP.Promise((resolve, reject) => {
Ember.$.ajax({
url: config.baseURL + "accounts/login",
data: {
username: username,
password: password
},
type: 'POST',
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
complete: (response)=> {
if (response.responseJSON.isAuthenticated)
resolve({isAuthenticated: true});
else
reject("Wrong credentials.");
}
});
});
},
invalidate() {
// log out
}
});
我调用函数使用:
// app/controllers/application.js
import Ember from 'ember';
export default Ember.Controller.extend({
session: Ember.inject.service('session'),
actions: {
alertSession() {
console.log("!! " + this.get('session').currentUser());
},
invalidateSession() {
this.get('session').invalidate();
this.transitionToRoute('login');
}
}
});
this.get('session').invalidate();
有效,但this.get('session').currentUser();
会return出现上述错误。
请让我知道如何解决这个问题。
另外,我正在使用 Ember 2.5.1.
谢谢!
在您的应用程序控制器中,您从 session 服务调用 currentUser()
,而您在 中定义了 currentUser()
oauth2.js 验证器。执行可能会失败,因为您没有修改 session 服务以引用您的身份验证器的 currentUser
函数。
另一个函数成功执行,因为 session 服务具有调用指定身份验证器的 invalidate()
函数所需的引用。
您可以考虑使用 ember-simple-auth 对 Managing a Current User 的建议。有了这个,您可以探索一个解决方案,该解决方案利用与 session 服务一起工作的隔离 currentUser 服务。