web-dev-qa-db-ja.com

Firebase getToken()TypeError:プロパティを読み取れません

現在サインインしているWebサイトのユーザーのトークンを取得しようとしています。ただし、javascriptは値を取得できません。ここには2つの問題があると思います。

  1. 開始時にAuth.currentUserを取得すると、「TypeError:nullのプロパティ 'getToken'を読み取れません」というエラーが発生します。しかし、コンソールでAuth.currentUser.getToken()と入力すると、トークンを持つオブジェクトが実際に表示されます。

  2. GetToken()が返すのは、トークンの値を含むキー「ea」を持つpromiseオブジェクトです。しかし、Auth.currentUser.getToken()。eaを実行すると、「null」になります。オブジェクトから直接トークンを取得するにはどうすればよいですか?

ありがとう!

トークンを取得する私のコード:

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

このスクリーンショットは役に立つかもしれません: Chrome console result

12
thousight

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)
    });
  }
});
29

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')
    }
})
2
Yang