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
トリガーされます。しかし、これは私が探しているものではありません。
onIdTokenChanged
は、IDトークンが変更されるたびにトリガーされます。 IDトークンが期限切れの場合は起動しません。新しいIDトークンが更新された場合、新しいユーザーがサインインした場合、または既存のユーザーがサインアウトした場合に発生します。
Firebaseは必要に応じて自動的に更新されます。たとえば、リアルタイムデータベースまたはFirestoreを使用している場合、永続的な接続とそのためのIDトークンが必要なため、トークンの有効期限が切れると自動的に更新されます。これにより、そのリスナーがトリガーされます。
getIdToken()
は、有効期限が切れていないトークンをキャッシュします。これを呼び出して有効期限を検出すると、IDトークンが自動的に更新され、そのリスナーがトリガーされます。
ところで、getToken()
は非推奨です。代わりにgetIdToken
を使用してください。