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

在useEffect中调用onAuthStateChange无法更新状态(Supabase+Expo)

问题排查与修复方案

核心问题1:onAuthStateChange回调参数使用错误

Supabase的onAuthStateChange回调函数参数并非包含data.session的对象,正确签名是第一个参数为认证事件类型,第二个参数才是session对象。你当前的解构方式无法正确获取更新后的session,导致状态不更新。

核心问题2:未清理订阅导致潜在异常

在useEffect中订阅onAuthStateChange后,若不清理订阅,组件卸载时会产生内存泄漏,也可能干扰后续事件触发。

修复后的代码

useEffect(() => {
  // 初始化获取当前session
  supabase.auth.getSession().then(({ data: { session } }) => {
    setSession(session);
  });

  // 订阅认证状态变化,使用正确的回调参数写法
  const authSubscription = supabase.auth.onAuthStateChange((_event, session) => {
    setSession(session);
  });

  // 组件卸载时清理订阅
  return () => {
    authSubscription.unsubscribe();
  };
}, []);

额外检查项

  • 确认使用的Supabase JS SDK为最新稳定版,旧版本在Expo环境下可能存在事件触发异常。
  • 测试登录/登出操作时,必须通过Supabase官方的signInWithPassword、signOut等方法执行,非官方的session修改不会触发onAuthStateChange事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:40:36