Android端用react-native-inappbrowser-reborn如何防止复用会话Cookie自动登录旧账号
解决方案
方案1:启用临时无痕会话(推荐)
react-native-inappbrowser-reborn 支持在打开授权页时启用无持久化的临时会话模式,不会读取或写入系统全局的Cookie存储,从根源避免复用上次登录的会话:
修改你openAuth的配置参数,新增对应平台的临时会话配置:
const result = await InAppBrowser.openAuth(url, deepLink, { showTitle: true, enableUrlBarHiding: true, enableDefaultShare: true, forceCloseOnRedirection: false, // 新增以下两个参数 ephemeralWebSession: true, // 安卓端生效:启用无痕会话 prefersEphemeralWebBrowserSession: true, // iOS端生效:启用无痕会话 })
方案2:给OAuth授权地址强制加登录提示参数
你用的是AWS Cognito的OAuth服务,支持OAuth2标准的prompt参数,在授权地址拼接prompt=login即可强制服务端忽略现有会话,弹出账号选择/登录页:
修改你的url拼接逻辑:
const url = `https://auth.noxaws.com//oauth2/authorize?identity_provider=${provider}&redirect_uri=${deepLink}&response_type=CODE&client_id=3ci277sn2mjed01mpgflfd7uf2&scope=aws.cognito.signin.user.admin&email&openid&phone&profile&prompt=login`
方案3:打开授权页前主动清理Cookie
如果使用的库版本较低不支持临时会话参数,可以在打开页面前主动调用清理Cookie的方法:
if (await InAppBrowser.isAvailable()) { await InAppBrowser.close(); // 新增清理Cookie逻辑 await InAppBrowser.clearCookies(); // 后续打开逻辑不变 const result = await InAppBrowser.openAuth(url, deepLink, { // 原有配置 }) }
优先级说明
优先使用方案1+方案2组合,兼容性最好,不会影响App其他业务的Cookie存储,也能保证服务端强制弹出登录页。
内容的提问来源于stack exchange,提问作者amal ouerfelli
相关产品推荐
相关产品推荐

