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的能力,只需做好凭证存储和请求拦截处理:
- 完整存储凭证信息
调用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); });
- 封装带自动刷新的请求方法
当请求返回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; } }
- 额外注意事项
- 检查Connected App的Refresh Token Policy设置,根据业务需求选择合适的过期策略(比如允许无限刷新或设置固定过期时间)
- 本地存储的凭证需做好安全防护,避免敏感信息泄露
- 若refresh token也过期,只能引导用户重新完成登录流程
内容的提问来源于stack exchange,提问作者Pravallika Damerla
相关产品推荐
相关产品推荐

