2016-06-21 28 views
5

我試圖獲取我當前登錄的網站用戶的令牌。但是,JavaScript無法爲我獲得價值。我認爲有2個問題在這裏:Firebase getToken()TypeError:無法讀取屬性

  1. 當我得到在啓動Auth.currentUser,我得到這個錯誤「類型錯誤:無法讀取空的特性‘爲gettoken’」。但是當我在控制檯中鍵入Auth.currentUser.getToken()時,具有令牌的對象實際上顯示出來了。

  2. getToken()返回給我的是一個承諾對象,其關鍵字'ea'包含該標記的值。但是當我做Auth.currentUser.getToken().aa它會讓我'null'。我如何直接從對象中檢索令牌?

謝謝!

我檢索令牌代碼:

var Auth = firebase.auth() 
var token = Auth.currentUser.getToken() 

這張截圖可能會有所幫助: Chrome console result

回答

13

按照documentation of firebase.User:getIdToken()

Returns a JWT token used to identify the user to a Firebase service.

Returns the current token if it has not expired, otherwise this will refresh the token and return a new one.

該方法返回一個承諾,因爲它如果令牌已過期,則可能需要往返Firebase服務器:

Auth.currentUser.getIdToken().then(data => console.log(data)) 

或者是再經典的JavaScript:

Auth.currentUser.getIdToken().then(function(data) { 
    console.log(data) 
}); 

日誌輸出:

ey...biPA

更新:確保用戶獲得令牌之前登錄,運行上面代碼在onAuthStateChanged listener

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    user.getIdToken().then(function(data) { 
     console.log(data) 
    }); 
    } 
}); 
+0

拿到ID令牌的示例中,我已經試過了,同樣的結果... – thousight

+0

雖然這樣做的直接讓我的令牌字符串,它仍然沒有解決TypeError的問題。但非常感謝您的答案,它有幫助。 – thousight

+0

這意味着沒有當前用戶,即您尚未登錄。 –

1

下面是如何使用的NodeJS

var firebase = require('firebase') 
firebase.initializeApp({ 
    apiKey:********* 
    databaseURL:********* 
}) 

var customToken = *********  
firebase.auth().signInWithCustomToken(customToken).catch(function(error) { 
    var errorMessage = error.message 
    console.log(errorMessage) 
}) 

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
     firebase.auth().currentUser.getToken().then(data => console.log(data)) 
    } else { 
     console.log('onAuthStateChanged else') 
    } 
}) 
相關問題