我 有 这样 的 话 :
export const Step1 = () => {
const [instanceUrl, setInstanceUrl] = useState('')
const [request, response, promptAsync] = AuthSession.useAuthRequest(
{
clientId: '...',
clientSecret: '...',
redirectUri: 'exp://localhost:19000',
scopes: ['read', 'write', 'follow'],
},
discovery
);
const handleLoginPress = () => {
promptAsync()
}
useEffect(() => {
const fetchAccessToken = async () => {
const tokenResult = await AuthSession.exchangeCodeAsync({
clientId: '...',
clientSecret: '...',
code: response.params.code,
redirectUri: 'exp://localhost:19000',
}, discovery)
console.log({ tokenResult })
}
if (response.type === 'success') {
fetchAccessToken()
}
console.log({ response })
}, [response])
return <><Dialog.Title title="Welcome" />
<Text>Dialog body text. Add relevant information here.</Text>
<Input placeholder="Community URL" onChangeText={(v) => setInstanceUrl(v)} />
<Button color='secondary' disabled={!request} onPress={handleLoginPress}>Login</Button></>
}
中 的 每 一 个
所以 我 可以 得到 令牌 的 结果 , 并 将 其 存储 在 AsyncStorage
中 。 但是 当 它 过期 时 , 我 如何 处理 它 ? 获得 refreshToken 的 正确 方法 是 什么 ? 它 将 存储 在 我 的 代码 库 中 的 什么 位置 ?
1条答案
按热度按时间3phpmpom1#
我将试着一个一个地回答这些问题。
获取刷新令牌的正确方法是什么
如果您查看exchangeCodeAsync的结果,您会发现结果实际上是TokenResponse,它为config提供了包括
accessToken
和refreshToken
在内的所有元数据。但是到期了怎么处理呢?
这很简单-你只需刷新它,你可以基于配置中的相同 meta信息,或者利用TokenResponse函数,如
isTokenFresh
和refreshAsync
。你也可以提前刷新一些规则。在我的代码库里会被放在哪里呢
取决于您的需求,以及此令牌的用途。如果您将其用于API访问,则您的网络堆栈可能是刷新它的最佳位置。例如,如果您正在使用Apollo Client,则可以创建a link,以便在收到401响应时进行刷新。此外,如果您预计令牌会经常过期,则可以选择在应用程序启动或应用程序前台事件时刷新它,甚至在点击401之前。
因此,我可以获得令牌结果,并将其存储在AsyncStorage中。
AsyncStorage
被定义为一个选项,此外,您可以考虑将SecureStore
或expo provides之类东西作为存储更敏感信息的选项。