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

React Native中Salesforce访问令牌过期后如何自动获取刷新令牌?

实现Salesforce Access Token自动刷新(无需用户重新登录)

必要配置

  • 先确认你的Salesforce Connected App已经开启Refresh Token权限:
    • 进入Salesforce Setup → Apps → App Manager → 找到你的Connected App → 编辑
    • 在OAuth Settings区域,勾选Refresh Token作为授权范围(Scopes)
    • 保存配置,同时确保Connected App的回调URL与React Native应用的配置完全一致

代码层面处理

react-native-force库本身支持基于refresh token自动刷新access token的能力,只需做好凭证存储和请求拦截处理:

  1. 完整存储凭证信息
    调用oauth.getAuthCredentials时,要保存返回的所有凭证字段,不能只存access token:
import { net, oauth } from "react-native-force";
import AsyncStorage from '@react-native-async-storage/async-storage';

oauth.getAuthCredentials((data) => {
  // 将完整凭证存入本地存储
  const credentials = {
    accessToken: data.accessToken,
    refreshToken: data.refreshToken,
    instanceUrl: data.instanceUrl,
    userId: data.userId,
    orgId: data.orgId
  };
  AsyncStorage.setItem('salesforceCredentials', JSON.stringify(credentials));
}, (error) => {
  console.error('获取凭证失败:', error);
});
  1. 封装带自动刷新的请求方法
    当请求返回401(Unauthorized)时,说明access token已过期,此时调用oauth.refreshAuthCredentials刷新token,并用新token重新发起请求:
async function salesforceRequest(endpoint, options = {}) {
  const savedCreds = JSON.parse(await AsyncStorage.getItem('salesforceCredentials'));
  if (!savedCreds) throw new Error('无有效Salesforce凭证');

  try {
    // 用现有token发起请求
    const response = await net.sendRequest(
      savedCreds.instanceUrl + endpoint,
      { ...options, accessToken: savedCreds.accessToken }
    );
    return response;
  } catch (error) {
    // 判定为token过期且存在refresh token时,执行刷新逻辑
    if (error.status === 401 && savedCreds.refreshToken) {
      try {
        // 刷新获取新凭证
        const newCreds = await oauth.refreshAuthCredentials(
          savedCreds.refreshToken,
          savedCreds.instanceUrl
        );
        // 更新本地存储的凭证
        await AsyncStorage.setItem('salesforceCredentials', JSON.stringify(newCreds));
        // 用新token重新发起请求
        return net.sendRequest(
          savedCreds.instanceUrl + endpoint,
          { ...options, accessToken: newCreds.accessToken }
        );
      } catch (refreshError) {
        // 刷新失败时,需引导用户重新登录
        console.error('Refresh Token刷新失败:', refreshError);
        throw refreshError;
      }
    }
    throw error;
  }
}
  1. 额外注意事项
  • 检查Connected App的Refresh Token Policy设置,根据业务需求选择合适的过期策略(比如允许无限刷新或设置固定过期时间)
  • 本地存储的凭证需做好安全防护,避免敏感信息泄露
  • 若refresh token也过期,只能引导用户重新完成登录流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:50:54