現在サインインしているWebサイトのユーザーのトークンを取得しようとしています。ただし、javascriptは値を取得できません。ここには2つの問題があると思います。
開始時にAuth.currentUserを取得すると、「TypeError:nullのプロパティ 'getToken'を読み取れません」というエラーが発生します。しかし、コンソールでAuth.currentUser.getToken()と入力すると、トークンを持つオブジェクトが実際に表示されます。
GetToken()が返すのは、トークンの値を含むキー「ea」を持つpromiseオブジェクトです。しかし、Auth.currentUser.getToken()。eaを実行すると、「null」になります。オブジェクトから直接トークンを取得するにはどうすればよいですか?
ありがとう!
トークンを取得する私のコード:
var Auth = firebase.auth()
var token = Auth.currentUser.getToken()
firebase.User:getIdToken()
のドキュメント によると:
Firebaseサービスに対してユーザーを識別するために使用されるJWTトークンを返します。
有効期限が切れていない場合は現在のトークンを返します。そうでない場合は、トークンを更新して新しいトークンを返します。
このメソッドは、トークンの有効期限が切れた場合にFirebaseサーバーへの往復が必要になる可能性があるため、promiseを返します。
Auth.currentUser.getIdToken().then(data => console.log(data))
または、より古典的なJavaScriptの場合:
Auth.currentUser.getIdToken().then(function(data) {
console.log(data)
});
ログ出力:
ey ... biPA
Update:トークンを取得する前にユーザーがサインインしていることを確認するには、上記のコードを onAuthStateChanged
リスナーで実行します :
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
user.getIdToken().then(function(data) {
console.log(data)
});
}
});
NodeJSを使用してIDトークンを取得する方法のサンプルを次に示します
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')
}
})