【问题标题】:Expo AuthSession promptAsync - no way to wait for return when getting a new access tokenExpo AuthSession promptAsync - 获取新访问令牌时无法等待返回
【发布时间】:2020-12-30 01:27:36
【问题描述】:

我们有一个使用 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;
    }
    
    ...
}

【问题讨论】:

    标签: javascript react-native expo auth0 pkce


    【解决方案1】:

    我正在解决一个 Expo 托管应用程序在使用 PKCE 流通过 Auth0 进行身份验证后尝试访问刷新令牌的类似问题。

    我遇到了这个 repo https://github.com/tiagob/create-full-stack/blob/master/packages/cfs-expo-auth0/src/index.tsx 在阅读有关刷新令牌和 Auth0 的世博会问题的 cmets 时 https://github.com/expo/examples/issues/209.

    我还没有从这个 repo 中实现任何东西,但它的一些方法似乎可以解决我遇到的问题,并希望你的问题。

    【讨论】:

    • 虽然链接发布很好,但您也应该对其进行解释,以便对未来的读者有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2013-08-23
    • 2022-01-01
    • 2022-06-19
    • 2016-02-02
    相关资源
    最近更新 更多