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

react-native-auth0中refreshToken为null的原因及获取方法

解决react-native-auth0获取refreshToken为null的问题

问题分析

登录流程正常但返回refreshToken: null,核心原因是:

  • 默认的Authorization Code Flow(PKCE)不会返回refresh token,必须显式请求offline_access权限
  • Auth0应用的配置未允许发行refresh token

步骤1:检查Auth0控制台配置

1.1 确认应用类型

进入Auth0控制台 → 你的应用 → Settings,确保应用类型选择为Native(React Native属于原生应用范畴,只有此类型才能获取refresh token)

1.2 启用离线访问权限

  • 进入应用的Advanced Settings → OAuth标签:
    • 开启Refresh Token Rotation(推荐,提升安全性)
    • 配置合适的Refresh Token Expiration规则(如绝对过期时间、滑动过期)
  • 进入APIs → 选择你的目标API → Settings:
    • 勾选Allow Offline Access,允许该API发行refresh token

步骤2:修改代码请求offline_access scope

调用authorize时,必须在scope参数中添加offline_access,否则Auth0不会返回refresh token:

import {useAuth0} from 'react-native-auth0';

export const LoginScreen = () => {
  const {authorize, error} = useAuth0();

  const onPressLogin = async () => {
    const credentials = await authorize({
      // 保留原有scope,新增offline_access
      scope: 'openid profile email offline_access'
    });
    console.log(credentials.refreshToken); // 此时应返回有效refreshToken
  };

  return /* 你的组件内容 */;
};

步骤3:使用refreshToken刷新凭证

拿到有效refreshToken后,可通过useAuth0提供的refresh方法刷新accessToken和idToken:

import {useAuth0} from 'react-native-auth0';

export const TokenRefreshComponent = ({refreshToken}) => {
  const {refresh, error} = useAuth0();

  const handleRefreshToken = async () => {
    try {
      const newCredentials = await refresh({refreshToken});
      // 返回新的accessToken、idToken,若开启了Refresh Token Rotation,还会返回新的refreshToken
      console.log('刷新后的凭证:', newCredentials);
    } catch (err) {
      console.error('凭证刷新失败:', err);
    }
  };

  return (
    <Button title="刷新凭证" onPress={handleRefreshToken} />
  );
};

注意事项

  • 如果使用Auth0 Universal Login,确保未跳过用户同意页面(除非是第一方应用并已配置自动同意),offline_access权限需要用户授权
  • 确认应用的Allowed Callback URLs、Allowed Logout URLs、**Allowed Origins (CORS)**配置正确,避免登录流程中的其他异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:30