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

Next.js Middleware中Supabase auth.getUser()返回null问题求助

问题原因及解决办法

核心问题:Next.js的Middleware运行在Edge Runtime(服务器端环境),根本无法访问浏览器的localStorage——这是浏览器专属的存储API,服务器侧代码拿不到里面的数据,所以你调用auth.getUser()或Auth.getSession()返回null是必然的。

下面是具体解决步骤:

  • 改用Cookie存储会话:绝大多数Auth库(比如NextAuth.js)默认用Cookie存储会话信息,因为服务器端可以读取请求头里的Cookie。检查你的Auth配置,确保会话存储策略是Cookie而非localStorage。以NextAuth.js为例,配置示例:
export const authOptions = {
  session: {
    strategy: "jwt", // JWT策略会把会话存在Cookie里
  },
  // 其他提供商、回调函数配置...
};
  • 确保请求自动携带Cookie:浏览器在发送同域请求时会自动携带Cookie,无需额外配置;如果是跨域请求,要确保请求配置了credentials: include。

  • 用正确的方式在Middleware里获取会话:如果用NextAuth.js,直接使用官方提供的auth中间件函数获取会话,示例:

import { auth } from "@/auth";

export default auth((req) => {
  const session = req.auth;
  if (!session) {
    // 处理未登录逻辑,比如重定向到登录页
    return Response.redirect(new URL("/login", req.url));
  }
});
  • 排查Auth初始化配置:检查你的Auth路由(比如app/api/auth/[...nextauth]/route.js)是否正确配置了提供商、会话策略,确保用户登录后,令牌和用户信息被正确写入Cookie。

  • 清理旧的localStorage数据:之前存在localStorage的会话数据已经没用了,建议手动清除,避免后续混淆。

内容的提问来源于stack exchange,提问作者Diego Beristain de la Mora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:12:35