如何在 React Native 中处理 OAuth2 令牌刷新?

how handle OAuth2 token refresh in react native?

有任何处理令牌刷新的 React Native 库吗?或者我需要制定一个刷新令牌的时间表?如果是,iOS 允许调度在后台执行吗?或者我可以检查每个服务器响应如果不刷新令牌是否有效?

实现这个的最佳方法是什么?

当我遇到这个问题时,我想到了两种策略来处理令牌刷新 API:

1 - 刷新来自 API

的特定错误

您的服务器应发送一个 INVALID_TOKEN_ERROR 时刻,您可以在该时刻制作自己的 refreshToken(credentials)

我发现有趣的一种技术是 polyfill fetch,其方式与本文中的类似: Handling Failed HTTP Responses With fetch()

2 - 在应用启动时刷新

我目前在我的应用程序上所做的是在应用程序启动时刷新我的令牌,而不管令牌的生存时间如何。因此,除非您的用户让应用程序打开的时间比您的生存时间长,否则您应该不会遇到任何问题。

我使用 redux-persist 加载状态回调在应用启动时挂钩。

refreshToken(凭据)

如果使用fbsdk刷新令牌功能非常简单:

import { AccessToken } from 'react-native-fbsdk'

[...]

AccessToken.refreshCurrentAccessTokenAsync()
    .then((FBTokenObject) => {
        let FBToken = FBTokenObject.accessToken
        [refresh your own API token using FBToken]
     )

如果您使用电子邮件和密码策略,您应该查看 react-native-keychain,以安全的方式将凭据保存在设备上。

结论

我没有在 API 错误时实施令牌刷新,因为我的令牌的生存时间是 5 天,我认为目前第二种策略已经足够好了。但是如果我的令牌的生存时间短于 2 天,我肯定会。

您还可以通过检查生存时间来提高性能,并根据值决定是否要刷新令牌,但在我看来,这并没有太大的好处。