【问题标题】:How do I persist user authentication using the Firebase refresh token?如何使用 Firebase 刷新令牌保持用户身份验证?
【发布时间】:2019-12-25 12:06:04
【问题描述】:

我正在构建一个使用 Firebase 电话身份验证进行用户登录的 React Native 应用程序。身份验证工作正常,但令牌在一小时后过期。我已经读到我需要使用刷新令牌来刷新idToken,但在 Firebase docs 上没有任何地方解释了如何执行此操作。它只解释了如何撤销刷新令牌,我什至找不到它。

我正在使用react-native-firebase 包。

我的问题是:如何获取刷新令牌,如何使用它,是否真的需要每小时调用一次 Firebase 来更新我的idToken

目前我的idToken 是这样的:

const authenticate = async (credential) => {
  try {
    const { user } = await firebase.auth().signInWithCredential(credential);
    const accessToken = await user.getIdToken();
    return accessToken;
  } catch (error) {
    console.log(error);
  }
}

然后我获取令牌并使用AsyncStorage 将其存储在本地,并在每次启动应用程序时检查令牌是否存在。

提前致谢。

【问题讨论】:

    标签: javascript firebase react-native firebase-authentication react-native-firebase


    【解决方案1】:

    来自https://rnfirebase.io/reference/auth/user#getIdToken 如果令牌已过期,似乎使用user.getIdToken() 刷新令牌。 如果您想刷新令牌,即使它仍然有效,您也可以随时使用forceRefresh 选项。

    【讨论】:

    • 谢谢 - 目前我正在使用 user.getIdToken 获取初始令牌,但要获取 user 对象,我必须通过 verificationIdsmsCode 来获取 @ 987654328@ 然后credentialfirebase.auth().signInWithCredential(credential) 得到idToken。简单地刷新令牌的最佳方法是什么?我已经建立了一些逻辑来将凭据存储到AsyncStorage 并在令牌过期时使用它,但不确定这是否是最好的方法。
    • 随着 IdToken 自动刷新,您只需在任何 API 调用之前使用 user.getIdToken() 和凭证。凭据是持久的,这意味着要获取它(即使在应用重启后),您需要调用firebase.auth().onAuthStateChanged((user) => ...) 来获取它,您不需要将凭据存储在 AsyncStorage
    • 感谢@OnlinoGame!那么这是否意味着我永远不需要将idToken 存储在AsyncStorage 中,因为它们总是持久的?我只是调用函数?还有你知道为什么onAuthStateChanged 方法没有返回一个promise吗?
    • onAuthStateChanged 使用回调代替。 firebase.auth().onAuthStateChanged(function(user) { if (user) { // User is signed in. } else { // No user is signed in. } }); 不,你不需要 AsyncStorage
    猜你喜欢
    • 2021-06-09
    • 2020-02-16
    • 2020-08-05
    • 1970-01-01
    • 2017-11-08
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多