web-dev-qa-db-ja.com

Firebaseアクセストークンは自動的に更新されますか?

Firebaseのメール/パスワード認証を使用しています。ユーザーが正常にサインインした後、次の方法でアクセストークンをクエリします。

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
    public void onComplete(@NonNull Task<GetTokenResult> task) {
        if (task.isSuccessful()) {
            String idToken = task.getResult().getToken();
            // Send token to your backend via HTTPS
            // ...
        } else {
            // Handle error -> task.getException();
        }
    }
});

Firebaseのドキュメントによると、アクセストークンは1時間後に期限切れになります。アプリで常に現在のアクセストークンを使用するケースを処理するために、解決策を探していたところ、Firebaseのドキュメントで Firebase.IdTokenListenerを登録する

onIdTokenChangedイベント

私の質問は:です

onIdTokenChangedイベント

アクセストークンの有効期限が切れた場合に自動的に起動されますか?

アクセストークンの有効期限が切れた後にイベントが自動的に発生しない場合、新しい/更新されたアクセストークンを「手動で」クエリする正しいアプローチは何ですか?

"FirebaseAuth.getInstance().getCurrentUser().getIdToken(boolean)"

方法?

私が知っている、私が呼び出す場合

mUser.getToken(true)

その後、上記のイベントが発生し、

IdTokenListener

トリガーされます。しかし、これは私が探しているものではありません。

12
Degoah

onIdTokenChangedは、IDトークンが変更されるたびにトリガーされます。 IDトークンが期限切れの場合は起動しません。新しいIDトークンが更新された場合、新しいユーザーがサインインした場合、または既存のユーザーがサインアウトした場合に発生します。

Firebaseは必要に応じて自動的に更新されます。たとえば、リアルタイムデータベースまたはFirestoreを使用している場合、永続的な接続とそのためのIDトークンが必要なため、トークンの有効期限が切れると自動的に更新されます。これにより、そのリスナーがトリガーされます。

getIdToken()は、有効期限が切れていないトークンをキャッシュします。これを呼び出して有効期限を検出すると、IDトークンが自動的に更新され、そのリスナーがトリガーされます。

ところで、getToken()は非推奨です。代わりにgetIdTokenを使用してください。

9
bojeil