我目前正在开发一个 React Native 应用程序,其中使用 Google OAuth 进行用户身份验证。我利用 Expo AuthSession API 中的 openAuthSessionAsync 方法来处理身份验证流程。登录过程工作正常,我可以成功检索会话 ID。但是,我一直不知道如何在登录完成后关闭浏览器窗口。
这是我的代码的相关部分:
const signIn = async () => {
const frontEndUrl = getBaseUrl();
const result = await Browser.openAuthSessionAsync(
`${frontEndUrl}/auth/google?mobile=true`,
`${frontEndUrl}`
;
console.log(result.type);
if (result.type !== "success") return;
const url = Linking.parse(result.url);
const sessionID = url.queryParams?.session_id?.toString() ?? null;
if (!sessionID) return;
await SecureStore.setItemAsync("session_id", sessionID);
};
我遵循了 GitHub OAuth with Expo 上的 Lucia Auth Guidebook 的指南,但它没有提到如何在身份验证后关闭浏览器或解决没有得到任何结果的问题。
我面临的问题:
浏览器窗口未关闭:登录成功后,浏览器窗口保持打开状态。
无结果返回:openAuthSessionAsync 的结果对象不包含任何数据,因此无法继续进行身份验证流程。
我已经搜索了 Expo 和 React Native 文档,但还没有找到解决方案。
有没有办法在使用 openAuthSessionAsync 成功登录后以编程方式关闭浏览器窗口?
或者只是确保 openAuthSessionAsync 方法返回预期结果,以便我可以继续我的身份验证流程?
任何帮助或指导将不胜感激!
提前谢谢您!
其他背景:
反应本机版本:0.74.2 世博SDK版本:51 平台:安卓 Github 存储库:RecordScratch
您可以使用
WebBrowser.dismissAuthSession()
以编程方式关闭网络浏览器。
更多文档这里。
对于没有结果的部分:我遇到了同样的问题,我切换到
WebBrowser.openBrowserAsync
,它为我解决了问题。