6

在AngularFire中,您可以訪問經過身份驗證的用戶的提供者(例如Google)accessToken。如何在AngularFire2中獲取當前用戶的訪問令牌?

似乎沒有辦法通過AngularFire2來訪問它嗎?

在初始登錄時這樣說:

this.af.auth.subscribe(user=> { 
    if (user) { 
    console.log(user.google); 
    } 
}); 

這將註銷idToken,的accessToken,供應商, 但是(在頁面刷新)將隨之註銷標準的詳細信息(UID,顯示名等。 ...) 而accessToken不是一個可訪問的屬性?

有沒有辦法訪問當前用戶的accessToken?

回答

0

訪問令牌才能訪問時,在用戶首次登錄從Firebase migration guide for web developers

隨着Firebase.com驗證API,你可以輕鬆地使用提供者的訪問令牌來調出該供應商的API並獲得更多信息。此訪問令牌仍然可用,但僅在登錄操作完成後立即生效。

var auth = firebase.auth(); 

var provider = new firebase.auth.GoogleAuthProvider(); 
auth.signInWithPopup(provider).then(function(result) { 
    var accessToken = result.credential.accessToken; 
}); 

所以這確實是無法在一個頁面刷新。如果你想讓它保持可用,你需要自己堅持下去。

+2

不會遺憾的是,這不適用於AngularFire2庫。 – Intellidroid

+1

是的,我也不明白。它看起來像'login()'用不同於'signInWithPopup()'的數據來解析。 –

+1

最後,我只是使用Firebase SDK獲取令牌,然後將其保存在localStorage中。我發現我不得不直接初始化AngularFire2,因爲它有點時髦(如果當前用戶仍在Firebase的驗證期內),那麼稍後可能會延遲加載此(AngularFire2)。 – Intellidroid

0

隨着AngularFire2,你可以得到這樣的標記:

this.af.auth.getToken() // returns a firebase.Promise<any> 

如果你想獲得一個ES6無極代替,只是用

Promise.resolve() 
    .then(() => this.af.auth.getToken() as Promise<string>) 
1

這個工作對我來說:

this.af.auth.getAuth().auth.getToken(false);//true if you want to force token refresh 

你可以把它放到一個服務,然後你可以得到這樣的令牌:

this.authService.getToken().then(
    (token) => console.debug(`******** Token: ${token}`)); 
+0

這是getAuth()儘管存在的問題....自從添加對Firebase 3的支持以來,getAuth()API已改變了行爲。 即使用戶實際登錄時,這會在頁面加載時返回null作爲初始值in。 請通過訂閱auth服務來異步觀察實際的authState:af.auth.subscribe()。 getAuth方法將在將來的版本中被刪除 – Intellidroid

+0

我知道文檔說這個,但我的解決方案工作正常。唯一的問題是警告提到,這將在未來按照您的說法工作,但不要擔心,因爲在那一刻會存在其他新方法或替代解決方案。 –

0

getToken現已棄用。你應該使用getIdToken來代替:

this.af.auth.currentUser.getIdToken(true) 
    .then((token) => localStorage.setItem('tokenId', token)); 
相關問題