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

Supabase应用运行后出现Invalid JWT问题,求auth.headers刷新方案

问题描述

在main.dart中初始化Supabase的代码如下:

await Supabase.initialize(
  url: config.api.url,
  anonKey: config.api.anonKey,
);

调用Edge Function的代码如下:

final authHeader = Supabase.instance.client.auth.headers['Authorization'] ?? '';
SseClient(
    http.Request(
      'POST',
      Uri.parse('${getConfigFromEnv().api.url}/functions/v1/chat_stream'),
    )
      ..headers.addAll({
        'Authorization': authHeader,
        'Content-Type': 'application/json',
      })
      ..body = jsonEncode(data),
    httpClientProvider: http.Client.new,
    );
}

初始运行正常,但应用长时间打开后,JWT过期,再次触发Edge Function时收到“Invalid JWT”响应,需要确保auth.headers中的JWT能自动刷新。

解决方案

1. 替换直接读取auth.headers的方式,从当前会话获取有效Token

Supabase.instance.client.auth.headers中的内容不会实时更新会话刷新后的新Token,正确做法是从当前会话对象中获取最新的AccessToken:

final session = Supabase.instance.client.auth.currentSession;
final authHeader = session != null ? 'Bearer ${session.accessToken}' : '';

Supabase客户端会自动处理会话的刷新逻辑,currentSession始终返回最新的有效会话(包括刷新后的新Token)。

2. 确认自动刷新与会话持久化配置(默认已开启,可显式声明)

初始化Supabase时,默认已启用自动刷新Token和会话持久化,若需要显式确认配置,可添加以下参数:

await Supabase.initialize(
  url: config.api.url,
  anonKey: config.api.anonKey,
  autoRefreshToken: true, // 显式开启自动刷新(默认值为true)
  persistSession: true, // 持久化会话,重启应用后可恢复并自动刷新(默认值为true)
);

3. 监听会话状态变化(可选,用于实时更新依赖Token的逻辑)

如果需要在Token刷新时实时更新相关业务逻辑,可以监听Auth状态变化事件:

Supabase.instance.client.auth.onAuthStateChange.listen((authState) {
  final Session? newSession = authState.session;
  // 会话更新(如Token刷新)时,在此处更新需要使用Token的模块
});

4. 主动检查会话有效性并触发刷新(极端场景处理)

若担心会话已过期但未触发自动刷新,可在调用Edge Function前主动检查并刷新:

try {
  final currentSession = Supabase.instance.client.auth.currentSession;
  if (currentSession != null && currentSession.isExpired) {
    // 主动刷新会话
    await Supabase.instance.client.auth.refreshSession();
  }
  // 获取最新Token
  final authHeader = 'Bearer ${Supabase.instance.client.auth.currentSession?.accessToken ?? ''}';
  // 执行Edge Function调用逻辑
} catch (e) {
  // 处理刷新失败情况,如引导用户重新登录
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:35:13