gpt4 book ai didi

react-native - Expo AuthSession 立即解析为 "dismiss"ed

转载 作者:行者123 更新时间:2023-12-01 01:39:50 27 4
gpt4 key购买 nike

我正在使用 Expo 的 AuthSession登录 Auth0 的模块:

    let result = await AuthSession.startAsync({
authUrl: `${auth0Domain}/authorize?` + qs.stringify({
client_id: auth0ClientId,
response_type: 'code',
scope: 'openid profile email offline_access',
redirect_uri: redirectUrl,
code_challenge_method: 'S256',
code_verifier: codeVerifier,
state: oAuthState,
audience: auth0Audience
})
})

if (result.type === 'success') {
...
} else if (
result.type === 'dismiss' ||
(result.type === 'error' && result.errorCode === 'login-declined')
) {
// FIXME: alert never pops without delay here, despite the if correctly evaluating true
// Any way to check if the window has closed, if that's the issue?
await new Promise((resolve) => setTimeout(resolve, 5000))

let retry = await alertAsync(
'Authentication dismissed',
'Cancel signing in?',
'Try again',
'Exit'
)
return retry ? this.loginWithAuth0() : false
}
logger.error('Login failed', result)
throw new Error('Error signing in')
}

在开发环境中我从来没有遇到过问题,但在已发布的应用程序中, promise 通常会立即解决 { type: dismiss } , 之前 浏览器关闭。甚至在 AuthSession 窗口打开之前,我就瞥见了警报(我尝试弹出以防 session 实际被解除)。

如果我在弹出错误之前添加 5s 延迟,它会在启动 AuthSession 后显示 5s而不是完成。

在安卓上测试。

我研究了迁移到 WebBrowser,但它似乎是相同的实现。

是否有一致的方法来实际 await Auth 过程完成,还是我应该放弃这整件事并编写自己的登录屏幕?

提前感谢您的任何输入/指导!

最佳答案

我已经详细解释了问题和可能的解决方案https://github.com/expo/expo/issues/6679#issuecomment-570963717

作为一种临时解决方法,您可以在应用程序的某处调用 AppState.currentState,也许只是为了在用户单击并启用 AuthSession 之前添加正确的监听器而记录它(在链接的 GitHub 问题中阅读更多信息)。

请看一下并发表评论:)

关于react-native - Expo AuthSession 立即解析为 "dismiss"ed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59589158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com