如何使用 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
对象,我必须通过 verificationId
和 smsCode
来获取 @ 987654328@ 然后credential
到firebase.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 访问令牌?