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

Next-Auth部署Linux服务器后关闭浏览器失活及Cookie前缀错误排查求助

Next-Auth部署后会话丢失问题排查方案

问题描述

使用Next-Auth 4.22.1 + NextJS 13.4.2开发的应用,本地开发模式运行正常,但部署到Linux服务器(通过Nginx将www.mydomain.com请求转发至localhost:3000)后,关闭浏览器再打开时用户会话丢失,会话Cookie及本地存储内容消失。采用Credential Provider对接自研ASP.NET后端,Postman测试后端功能正常。

报错信息

重新打开浏览器时控制台出现以下错误:

Cookie “__Host-next-auth.csrf-token” has been rejected for invalid prefix.

Cookie “__Secure-next-auth.callback-url” has been rejected for invalid prefix.

Cookie “__Host-next-auth.csrf-token” has been rejected for invalid prefix.

当前Cookie详情(示例域名:mysite.com)

__Host-next-auth.csrf-token
Created:"Fri, 30 Jun 2023 12:04:05 GMT"
Domain:"mysite.com"
Expires / Max-Age:"Session"
HostOnly:true
HttpOnly:true
Last Accessed:"Fri, 30 Jun 2023 12:04:05 GMT"
Path:"/"
SameSite:"Lax"
Secure:true
Size:158

__Secure-next-auth.callback-url:"https%3A%2F%2Fmysite.com"
Created:"Fri, 30 Jun 2023 12:04:05 GMT"
Domain:"mysite.com"
Expires / Max-Age:"Session"
Last Accessed:"Fri, 30 Jun 2023 12:04:05 GMT"
Path:"/"
SameSite:"Lax"
Secure:true
Size:59

_Secure-next-auth.session-token:"blah..."
Created:"Fri, 30 Jun 2023 00:25:52 GMT"
Domain:"mysite.com"
Expires / Max-Age:"Sun, 30 Jul 2023 12:08:10 GMT"
HostOnly:true
HttpOnly:true
Last Accessed:"Fri, 30 Jun 2023 12:08:11 GMT"
Path:"/"
Secure:true
Size:3559

排查与解决步骤

1. 修正Cookie前缀合规性

浏览器对__Host-和__Secure-前缀的Cookie有严格规则,当前配置违反了这些规则:

  • __Host-前缀要求:必须满足Secure: true、Path: /,且不能设置Domain属性(保持HostOnly)。你的__Host-next-auth.csrf-token设置了Domain:"mysite.com",导致浏览器拒绝。
  • __Secure-前缀要求:仅需Secure: true,非跨子域场景下建议不设置Domain,避免不必要的跨域问题。
  • 拼写错误:_Secure-next-auth.session-token前缀少一个下划线,正确应为__Secure-next-auth.session-token。

在Next-Auth配置文件(如[...nextauth].js/ts)中覆盖Cookie配置:

export default NextAuth({
  // 其他配置(providers、session等)...
  cookies: {
    csrfToken: {
      name: '__Host-next-auth.csrf-token',
      secure: true,
      path: '/',
      httpOnly: true,
      sameSite: 'Lax',
      // 移除domain配置,让浏览器自动使用HostOnly
    },
    callbackUrl: {
      name: '__Secure-next-auth.callback-url',
      secure: true,
      path: '/',
      sameSite: 'Lax',
      // 非跨子域场景下,移除domain配置
    },
    sessionToken: {
      name: '__Secure-next-auth.session-token',
      secure: true,
      path: '/',
      httpOnly: true,
      sameSite: 'Lax',
      maxAge: 30 * 24 * 60 * 60, // 保持原有过期时间
      // 移除domain配置
    }
  }
})

2. 修正Nginx代理配置

确保Nginx转发请求时传递正确的请求头,让Next.js识别HTTPS环境并生成合规的Secure Cookie:

server {
  listen 443 ssl;
  server_name www.mydomain.com;

  # SSL证书配置省略...

  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}

3. 确认生产环境变量配置

在服务器上设置以下环境变量:

  • NEXTAUTH_URL=https://www.mydomain.com:指定Next-Auth的回调地址,需与实际域名完全一致
  • NEXTAUTH_SECRET=xxx:设置随机生成的安全字符串(可通过openssl rand -hex 32生成),用于会话加密

4. 验证修复效果

部署修改后,重新登录并关闭浏览器,再次打开站点:

  • 检查控制台是否仍有Cookie拒绝错误
  • 在浏览器开发者工具「Application」→「Cookies」中,确认__Host-next-auth.csrf-token、__Secure-next-auth.session-token等Cookie已正确存储,且无Domain属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:09:53