2016-07-13 7 views
10

firebaseユーザーを認証するのに "signInWithCustomToken()"を使用しました。Firebase 3.x.xでカスタムfirebaseトークンの有効期限を処理する方法

このトークンは1時間で有効期限が切れます。

Firebaseはトークンの有効期限を1時間にすることを推奨しています。 "php-jwt"ライブラリを使用してカスタムトークンを作成中に の有効期限を変更すると、firebase が例外をスローします。 "カスタムトークン形式が正しくありません。 ドキュメントをチェックしてください。

ソリューションを探している間、私はスレッド "Firebase Android Authentication failed: expired_token (Auth token is expired)"

しかしによって返されたリフレッシュトークン "onTokenRefresh()は、" 私のために動作しません、次を発見しました。

このカスタムトークンを更新する手順は何ですか?

または

マニュアルの有効期限をカスタムトークンに設定する方法はありますか?

答えて

-5

あなたは

FirebaseInstanceId.getInstance().getToken(); 

FirebaseInstanceIdは私のクラス名は、あなたに合わせて変更され、このコードを使用してリフレッシュトークンを取得することができます。

+0

実際、これはVarshaが探している解決策ですか? –

+0

私は "http://stackoverflow.com/questions/37505119/firebase-android-authentication-failed-expired-token-auth-token-is-expired"で与えられた解決策を試しました。しかし、私のために働かなかった。 –

+0

@ChintanSoniが 'onTokenRefresh()'のところで 'FirebaseInstanceId'を使って答えを出すのはまったく予想外のことではありません。どちらもFirebase Cloud Messagingのコンセプトです。 Firebase認証と何が関係しているかは良い質問ですが、OPは[MCVE](http://stackoverflow.com/help/mcve)を提供することで答えなければならないものです。 –

10

Firebaseカスタムトークン生成には制限があります。 Firebaseのカスタム認証トークンは最大1時間(3600秒)に制限されています。

expトークンの有効期限が切れる時間(秒単位)。これは、iatよりも遅くても3600秒後に になる可能性があります。

認証トークンが時間ごとに有効期限が切れた場合、その困難な私たちは有効なセッションを維持するために、すべての時間:(

我々は(グーグル、フェイスブック、電子メール...)のようなデフォルトの認証プロバイダを使用します。Firebase SDKデフォルトでは、あなたの認証トークンをリフレッシュするの世話をする。しかし、カスタム認証では、Firebase SDKは、新しいトークンを取得するには、サードパーティのサーバーに連絡する必要があります。 ここだけSDKがトークンをリフレッシュするために失敗している!

私の回避策は、あります地元で「最後にトークンを取得する時刻」の情報を毎月更新する トークンが正常にフェッチされたため、1時間後に手動でトークンを更新できます。あなたはより多くの情報のため、この問題のログを参照することができ

  1. https://github.com/firebase/quickstart-android/issues/31
  2. In Firebase 9.0.0 API, how to check the user has valid Auth session or not?

更新:

Googleは彼らの文書、

を更新

exp(有効期限):UNIXエポックからの経過時間(トークンの有効期限)。最大3600秒後にihatよりも になる可能性があります。 (注:これは、カスタムトークン の有効期限が切れる時刻のみを制御しますが、 signInWithCustomToken()を使用してユーザーに署名すると、セッションが無効になるか、ユーザーがログアウトするまで、デバイス にログインしたままになります。

と言うと、カスタムJWTトークンはmax 1Hrに対して有効です。有効期限が切れる前にFirebaseでユーザを認証してください。そのセッションはアクティブのままです。それは失効しません!

あなたは

public static boolean hasValidAuthToken() { 
    return FirebaseAuth.getInstance().getCurrentUser() != null ? true : false; 
} 

希望、これはあなたを助けるでしょう、そのユーザが有効なセッションを持っていることを確認するための方法の下に使用することができます!

+0

はい、間違いなく助けになりました。 1時間ごとに手動でトークンを更新することは価値のある解決策ではないかもしれません。 (1時間ごとにサーバコールが行われると、アプリのパフォーマンスが低下する可能性があります) Firebaseがすぐに代替機能を提供できることを願っています。 –

+0

これまで、このソリューションを試してみるには、サーバー側でトークンをリフレッシュまたは検証する方法はありますか? _私はphp-jwtライブラリを使用しました。 –

+1

サーバー側でエンドポイントを作成して、すべてのクライアント要求に対して「カスタム認証トークン」を発行できます。詳細については、このドキュメント[サーバーでカスタムトークンを作成する方法](https://firebase.google.com/docs/auth/server/create-custom-tokens) –

関連する問題