Expo-Auth-Session安卓端登录后无法重定向回应用,iOS正常求助
Expo Azure登录安卓端重定向异常修复
问题根因
安卓端通过Chrome完成Azure登录后无法正常重定向回Expo应用,本质是安卓端深链接/重定向URI配置不匹配,以及Expo在安卓、iOS端处理外部浏览器跳转的逻辑差异导致的。
具体修复步骤
修正重定向URI的平台配置
- 确保
EXPO_PUBLIC_REDIRECT_URI为exp://开头的Expo深链接(如exp://127.0.0.1:19000)或自定义Scheme(裸机应用); - 登录Azure Portal,找到对应应用注册,将该URI添加到移动和桌面应用平台下的重定向URI列表,不要放到Web平台分类中。
- 确保
调整AuthRequest配置
- 明确指定平台参数,确保安卓端的认证流程适配外部浏览器跳转,同时强制启用PKCE(Expo推荐的安全认证方式):
import { Platform } from 'react-native'; // Endpoint const discovery = useAutoDiscovery(`https://login.microsoftonline.com/${tenantID}/v2.0`); // Request const [request, response, promptAsync] = useAuthRequest( { clientId: process.env.EXPO_PUBLIC_CLIENT_ID, scopes: ["openid", "profile", "email", "offline_access", "User.Read.All"], redirectUri: process.env.EXPO_PUBLIC_REDIRECT_URI, platform: Platform.OS === 'android' ? 'android' : undefined, usePKCE: true, }, discovery );
- 明确指定平台参数,确保安卓端的认证流程适配外部浏览器跳转,同时强制启用PKCE(Expo推荐的安全认证方式):
配置Expo深链接支持
- 若使用自定义Scheme,在
app.json中添加Scheme配置:{ "expo": { "scheme": "yourappcustomscheme" } } - 确保Azure Portal中注册的重定向URI与该Scheme完全匹配(如
yourappcustomscheme://auth)。
- 若使用自定义Scheme,在
增强错误捕获与调试
- 在登录逻辑中添加更详细的日志输出,排查重定向后的参数异常:
const handleLogin = async () => { try { const codeResponse = await promptAsync(); console.log('Auth Callback Response:', codeResponse); if (request && codeResponse?.type === "success" && discovery) { const res = await exchangeCodeAsync( { clientId: process.env.EXPO_PUBLIC_CLIENT_ID, code: codeResponse.params.code, extraParams: request.codeVerifier ? { code_verifier: request.codeVerifier } : undefined, redirectUri: process.env.EXPO_PUBLIC_REDIRECT_URI, }, discovery ); setToken(res.accessToken); await gettingAllDatas(); } else if (codeResponse?.type === 'error') { console.error('Auth Flow Error:', codeResponse.error, codeResponse.errorDescription); } } catch (error) { console.error("Login Error Full Details:", JSON.stringify(error, null, 2)); } };
- 在登录逻辑中添加更详细的日志输出,排查重定向后的参数异常:
测试验证
- 安卓端测试时使用Chrome浏览器,确保Expo Go或打包后的应用能被重定向URI正常唤起;
- 检查Azure的应用注册中是否开启了“允许公共客户端流”(在“认证”>“高级设置”中)。
内容的提问来源于stack exchange,提问作者Dekel
相关产品推荐
相关产品推荐

