我们有一个使用 AuthSession 的托管 Expo 应用程序,专门用于将我们的应用程序部署到 Web 环境。使用 Auth0 和 PKCE 授权进行身份验证。
当我们当前的访问令牌已过期时,尝试获取新的访问令牌时遇到了问题。在发出 HTTP 请求之前,我们检查访问令牌是否已过期,如果已过期,我们使用 AuthSession.promptAysnc() 获取新的。问题是我们无法在发出 HTTP 请求之前等待 promptAsync 完成。
我们错过了什么吗?
const [request, result, promptAsync] = AuthSession.useAuthRequest(
{
redirectUri,
clientId,
scopes,
prompt: AuthSession.Prompt.Login,
extraParams: {
audience
}
},
{ authorizationEndpoint, tokenEndpoint, revocationEndpoint }
);
const refreshAuthSessionAsync = async () => {
...
promptAsync({ useProxy });
// sleep hack - wait until we have something to return
await new Promise(r => setTimeout(r, 1000));
return authState;
};
const handleFetchAsync = async (url, request) => {
...
if (Date.parse(expiresAt) < (new Date()).getTime()) {
newAuthState = await refreshAuthSessionAsync();
return newAuthState;
}
...
}