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

Supabase + React Native:一周未使用后访问令牌无法刷新

问题原因及解决方案

可能的原因

  • AsyncStorage 持久化可靠性不足:Expo 的 AsyncStorage 并非专为敏感持久化数据设计,在应用长时间未使用时,可能被系统(尤其是 iOS 的自动缓存清理、Android 的后台内存管理)清除存储的 Session 数据。当 Supabase 客户端重启后无法读取到有效的刷新令牌,就只能使用已过期的 Access Token,导致接口返回 JWT expired。
  • Session 读取时机或逻辑问题:应用长时间休眠后启动,AsyncStorage 的异步读取可能存在延迟或失败,Supabase 客户端初始化时未能正确加载存储的 Session,进而无法触发自动刷新逻辑,直接使用过期的 Token。
  • 刷新令牌隐性失效:虽然社区普遍认为刷新令牌无过期时间,但如果期间用户账号发生变更(如修改密码、权限被调整),对应的刷新令牌会被后台主动吊销,也会导致刷新失败。

解决方案

  1. 替换 AsyncStorage 为 Expo SecureStore
    SecureStore 是 Expo 提供的专门用于存储敏感数据的 API,持久化稳定性远高于 AsyncStorage,不易被系统清理。需要封装适配 Supabase 要求的 Storage 接口:
import * as SecureStore from 'expo-secure-store';

const supabaseStorage = {
  getItem: async (key: string) => {
    try {
      return await SecureStore.getItemAsync(key);
    } catch (error) {
      return null;
    }
  },
  setItem: async (key: string, value: string) => {
    await SecureStore.setItemAsync(key, value);
  },
  removeItem: async (key: string) => {
    await SecureStore.deleteItemAsync(key);
  },
};

// 初始化 Supabase 客户端
createClient(
  '<supabaseUrl>',
  '<anonKey>',
  {
    auth: {
        storage: supabaseStorage,
        autoRefreshToken: true,
        persistSession: true,
        detectSessionInUrl: false,
    }
  }
);
  1. 主动检查 Session 有效性
    在应用启动时,主动触发 Session 检查与刷新,避免依赖自动逻辑:
// 应用启动时执行
const checkAndRefreshSession = async () => {
  const { data: { session } } = await supabase.auth.getSession();
  if (session) {
    const isAccessTokenExpired = Date.now() > session.expires_at * 1000;
    if (isAccessTokenExpired) {
      try {
        await supabase.auth.refreshSession();
      } catch (error) {
        // 刷新失败,引导登录
        await supabase.auth.signOut();
        // 跳转登录页面
      }
    }
  }
};
checkAndRefreshSession();
  1. 监听 Auth 状态变化
    通过状态监听捕获刷新失败事件,及时处理登录逻辑:
supabase.auth.onAuthStateChange((event, session) => {
  if (event === 'TOKEN_REFRESH_FAILED') {
    supabase.auth.signOut();
    // 跳转登录页面
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:43:18