2

问题:EmberJS从灰烬,简单-auth的认证获取当前用户

我试图获取当前用户从灰烬,简单身份验证通过扩展ember-simple-auth/authenticators/base登录。我只是想创建一个名为currentUser()函数将返回用户名,但我得到每当我试图调用函数的错误:

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();将返回上述错误。 请让我知道如何解决这个问题。 另外,我正在使用Ember 2.5.1。

谢谢!

回答

4

在你的应用程序控制器,您呼叫从会议服务currentUser(),而你已经在你的oauth2.js认证定义currentUser()。执行可能会失败,因为您尚未修改会话服务以引用您的验证器的currentUser函数。

其他函数执行成功,因为会话服务具有调用指定认证者的函数所需的引用。

您可能会考虑使用ember-simple-auth针对Managing a Current User的建议。有了这个,您可以探索一个解决方案,该解决方案利用与会话服务配合使用的当前用户服务的隔离服务。

+0

哦,哇,我从来没有意识到烬简单auth有自己currentUser。非常感谢! – IFH

+0

通过任何机会,你知道为什么在app/services/current-user.js(来自你发给我的链接)里面有一个错误,说“没有为'user'找到模型”?抱歉,我是新来的烬。 – IFH

+1

在Ember中,Ember Data有助于保存和检索您的服务器上的数据。 A **模型** [“定义了您呈现给用户的数据的属性,关系和行为。”](https://guides.emberjs.com/v2.5.0/models/#toc_models)它看起来像好像你需要在你的应用中创建一个['user'模型,像这样](https://ember-twiddle.com/ce25a4c6497906e95a87eff95ad410ec?openFiles=models.user.js%2C)。 – jacefarm