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

Auth.js(Next-Auth)会话数据存储及令牌变化问题咨询

问题解答

1. 会话数据的存储位置与方式

你使用的Auth.js v5(next-auth@beta)搭配Credential Provider和MySQL数据库时,默认采用数据库会话存储策略,而非JWT承载式会话:

  • authjs.session-token 不是携带用户数据的传统JWT,它只是一个引用令牌——解码后无payload是正常表现,它的核心作用是作为服务端查询数据库的密钥。
  • 你添加的email、uid等会话数据,以及会话过期时间、关联用户ID等信息,会存储在MySQL的sessions表中,用户基础信息则存在users表,两者通过用户ID关联。当调用await auth()时,服务端会用请求中的authjs.session-token查询数据库对应的会话记录,再关联用户信息返回完整的session对象。

2. authjs.session-token 每次请求变化的原因

这是Auth.js默认开启的**会话滚动(Session Rolling)**机制导致的:

  • 当用户发起请求(比如调用auth()、访问受保护路由)时,服务端会自动刷新会话的过期时间,同时生成新的authjs.session-token写入Cookie,旧令牌会被标记失效。
  • 该机制的目的是提升安全性:缩短有效令牌的生命周期,降低令牌被劫持后滥用的风险。如果不需要此行为,可在NextAuth配置中手动关闭:
export const { auth, signIn, signOut } = NextAuth({
  // 其他配置项...
  session: {
    rolling: false, // 关闭会话滚动机制
  },
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:42:02