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

生产环境正常,本地开发崩溃:Fetch问题导致页面故障求助

问题分析与解决方案

你的核心问题是本地开发环境下NextAuth的next-auth.session-token Cookie缺失,导致认证功能异常,但生产环境正常。结合你的代码和排查操作,以下是具体问题点和解决步骤:

一、核心问题定位

  1. 手动清理Cookie的冲突:你在events.signOut中手动设置Set-Cookie来清除会话Cookie,但NextAuth本身会自动处理登出时的Cookie清理逻辑。手动设置的Cookie属性(如HttpOnly、SameSite)可能与开发环境的浏览器规则冲突,导致正常登录后Cookie无法被正确存储或读取。
  2. Session回调的属性覆盖问题:在session回调中,你直接用session.user = token.user覆盖了原有session.user对象,导致之前设置的accessToken等属性丢失,前端无法获取认证凭证引发功能异常。
  3. 开发环境配置缺失:本地环境未正确配置NEXTAUTH_URL,NextAuth无法生成符合开发环境规则的Cookie。

二、具体修复步骤

1. 移除手动清理Cookie的代码

修改events.signOut逻辑,依赖NextAuth自动处理Cookie清理:

events: {
  async signOut({ token, session }) {
    // 仅清理内存中的token和session,Cookie交给NextAuth自动处理
    token = {};
    session = {};
  },
},

2. 修复Session回调的属性覆盖问题

避免直接覆盖session.user,改为合并属性:

async session({ session, token, trigger }) {
  // 合并token中的用户信息与原有session属性,避免覆盖
  session.user = {
    ...session.user,
    ...token.user,
    accessToken: token.accessToken,
    refreshToken: token.refreshToken,
    accessTokenExpires: token.accessTokenExpires,
  };
  session.organization = token.organization;
  session.subscription_active = token.subscription_active;
  session.board = token.board;

  return session;
},

3. 配置本地环境的NEXTAUTH_URL

在.env.local文件中添加:

NEXTAUTH_URL=http://localhost:3000

(如果你的开发端口不是3000,替换为对应端口)

4. 彻底清理浏览器Cookie并测试

  • 打开浏览器开发者工具(F12),在Application标签下删除所有与localhost相关的Cookie
  • 用隐私窗口打开应用,重新登录,检查Cookie列表中是否存在next-auth.session-token

5. 查看NextAuth调试日志

因为你已经开启了debug: process.env.NODE_ENV === 'development',登录时查看浏览器控制台和终端的NextAuth日志,确认:

  • 登录请求是否成功返回用户数据
  • JWT token是否正确生成
  • Cookie的设置过程是否有报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:44:59