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