如何使用 Firebase 刷新令牌保持用户身份验证?

Posted

技术标签:

【中文标题】如何使用 Firebase 刷新令牌保持用户身份验证?【英文标题】:How do I persist user authentication using the Firebase refresh token? 【发布时间】: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 将其存储在本地,并在每次启动应用程序时检查令牌是否存在。

提前致谢。

【问题讨论】:

【参考方案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

以上是关于如何使用 Firebase 刷新令牌保持用户身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Firebase Google 身份验证获取带有刷新令牌的 YouTube 数据 API 访问令牌?

使用访问令牌和刷新令牌保持身份验证

如何在 Ionic 4 中使用 Firebase 处理刷新令牌?

何时应该实现刷新令牌以及如何保持无状态?

使用刷新令牌对Firebase管理员进行身份验证

页面刷新后如何保持用户登录