如何从WebBrowser.openAuthSessionAsync结果中获取令牌及参数数据?
获取WebBrowser.openAuthSessionAsync返回的令牌与参数数据
WebBrowser.openAuthSessionAsync() 执行后会返回一个Promise,授权流程完成后,resolve的结果里会包含最终跳转的url字段——你的令牌和参数就嵌在这个回调URL里,以下是具体的提取方法:
1. 从返回结果中解析URL参数
通过async/await或Promise链式调用拿到返回结果,先判断授权是否成功,再解析URL中的参数:
import { WebBrowser } from 'react-native'; async function initiateAuth() { const authEndpoint = '你的授权服务地址'; const redirectUri = '已在授权服务配置的回调地址'; const authResult = await WebBrowser.openAuthSessionAsync(authEndpoint, redirectUri); // 确认授权流程成功完成 if (authResult.type === 'success') { // 解析URL的查询参数部分 const urlObj = new URL(authResult.url); const params = new URLSearchParams(urlObj.search); // 提取令牌(字段名根据授权服务定义调整,通常是access_token) const accessToken = params.get('access_token'); // 按需提取其他参数,比如刷新令牌、过期时间 const refreshToken = params.get('refresh_token'); const expiresIn = params.get('expires_in'); // 这里即可使用获取到的令牌和参数 console.log('Access Token:', accessToken); } }
2. 处理哈希模式的参数
如果授权服务将参数放在URL的哈希部分(比如redirectUri#access_token=xxx),需要调整解析逻辑:
if (authResult.type === 'success') { const urlObj = new URL(authResult.url); // 去掉哈希开头的#号后再解析 const hashParams = new URLSearchParams(urlObj.hash.slice(1)); const accessToken = hashParams.get('access_token'); }
关键注意点
- 确保
redirectUri和你在授权服务后台配置的回调地址完全一致,否则授权服务不会正确跳转,也无法返回参数 - 不同授权服务的令牌字段可能不同,比如部分服务用
id_token,请参考对应服务的官方文档确认字段名 - 若授权失败,
authResult.type会是cancel或其他失败标识,需做好异常处理
内容的提问来源于stack exchange,提问作者mingmingming
相关产品推荐
相关产品推荐

