使用Expo实现Twitter OAuth2认证时,令牌兑换环节报错求助
React-Native/Expo 中 Twitter OAuth2 令牌兑换失败问题
场景说明
我在React-Native/Expo应用中,基于expo-auth-session包实现Twitter OAuth2认证(参考Expo官方Twitter OAuth指南)。认证流程分为两步:
- 第一步:用户授权应用访问账户,成功获取授权码
- 第二步:使用授权码兑换访问令牌,此步骤出现问题
代码示例
调用exchangeCodeAsync兑换令牌的代码如下:
exchangeCodeAsync({ clientId: '<CLIENT_ID>', redirectUri: makeRedirectUri({ scheme: 'my.app', useProxy }), code: response.params.code, extraParams: { client_id: "<CLIENT_ID>", code_verifier: request?.codeVerifier || '', redirect_uri: makeRedirectUri({ scheme: 'my.app', useProxy }), grant_type: "authorization_code", }, }, discovery)
错误信息
触发以下未处理的Promise拒绝错误:
Possible Unhandled Promise Rejection (id: 0): SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
问题排查现状
该错误表明exchangeCodeAsync请求Twitter的/oauth2/token接口时,返回的不是预期的JSON响应,而是HTML错误页面,页面提示内容为:
Something went wrong, but don’t fret — let’s give it another shot.
已确认以下内容无问题:
- 授权流程正常,成功获取到授权码
redirect_uri配置正确code_verifier和授权码code的格式符合Twitter官方文档要求
完整App.js配置已在Expo Snack中完成配置(app.json内已设置自定义scheme)
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

