You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Facebook.useAuthRequest报Invalid code verifier错误问询

报错根因

该错误是因为expo-auth-session默认开启**PKCE(代码交换证明密钥)**安全授权流程,你手动拼接参数调用Facebook换token接口时,缺失了PKCE流程强制校验的code_verifier参数;且你使用的Facebook Graph API v7.0版本已强制开启PKCE校验,未传符合规则的参数就会返回错误码1的OAuthException异常。

code_verifier不需要你手动生成,是SDK每次发起授权请求时自动生成的加密随机字符串。

可落地解决方案

方案1:使用SDK封装方法(推荐,避免参数拼接错误)

不要自己手动请求Graph API换token接口,直接调用expo-auth-session内置的exchangeCodeAsync方法,SDK会自动传入匹配的code_verifier、校验参数一致性,示例代码如下:

import * as Facebook from 'expo-auth-session/providers/facebook';
import { ResponseType } from 'expo-auth-session';
import { useEffect } from 'react';

// 发起授权请求
const [request, response, promptAsync] = Facebook.useAuthRequest({
  clientId: '你的Facebook应用Client ID',
  responseType: ResponseType.Code,
});

// 监听授权结果
useEffect(() => {
  const getToken = async () => {
    if (response?.type === 'success') {
      const { code } = response.params;
      // 调用封装好的换token方法,自动处理code_verifier传参
      const tokenRes = await Facebook.exchangeCodeAsync({
        clientId: '你的Facebook应用Client ID',
        clientSecret: '你的Facebook应用Client Secret',
        code,
        // 必须使用发起请求时生成的redirectUri,不能手动硬编码避免不一致
        redirectUri: request.redirectUri,
      });
      // tokenRes.accessToken 即为最终获取到的Facebook访问令牌
      console.log('获取到的accessToken:', tokenRes.accessToken);
    }
  };
  getToken();
}, [response]);

方案2:手动调用接口时补传code_verifier参数

如果业务需要自行请求Graph API接口,直接从useAuthRequest返回的request对象中取当次请求生成的codeVerifier字段,拼到请求参数中即可,请求参数示例:

GET https://graph.facebook.com/v7.0/oauth/access_token
  ?client_id=你的Facebook应用ClientID
  &redirect_uri=和发起授权时完全一致的回调地址
  &client_secret=你的Facebook应用ClientSecret
  &code=授权成功返回的code值
  &code_verifier=${request.codeVerifier}
避坑提示
  • 换token时传入的redirect_uri必须和发起授权请求时的redirectUri完全一致,末尾斜杠、路径、参数不能有任何差异,否则也会触发校验失败
  • 每次发起授权请求SDK都会生成新的codeVerifier,必须使用当次授权请求对应的值,不能硬编码固定值复用
  • Expo SDK 45运行在iOS端、Expo Go环境时不要手动关闭PKCE配置,否则会触发系统层面的授权安全拦截

内容的提问来源于stack exchange,提问作者Duke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 06:15:44