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

如何为Next Auth的maxAge配置时区,修正会话过期时间偏差?

修复Next Auth会话过期时间与本地时区不匹配的问题

问题原因

Next.js 和 Next Auth 默认使用 UTC 时区处理时间,你设置的maxAge: 3600(1小时)是基于UTC时间的会话存活时长。由于本地时区为IST,时区转换会导致会话过期时间与本地预期出现偏差,最终表现为实际过期时间晚于设置值。

修复方案

根据你使用的会话策略(JWT/数据库),选择对应方式调整:

1. 若使用 JWT 策略

在Next Auth配置中,通过jwt和session回调手动控制过期时间,确保会话从本地当前时间起1小时后过期:

import type { AuthOptions, JWT } from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";

export const authOptions: AuthOptions = {
  providers: [
    // 你的登录提供者配置
    CredentialsProvider({
      // ...自定义验证逻辑
    }),
  ],
  session: {
    strategy: "jwt",
    maxAge: 60 * 60, // 保留基础配置,实际过期时间由回调控制
  },
  callbacks: {
    async jwt({ token, user }) {
      if (user) {
        // 计算本地时间1小时后的UTC时间戳
        const localExpiry = new Date();
        localExpiry.setHours(localExpiry.getHours() + 1);
        token.exp = Math.floor(localExpiry.getTime() / 1000);
      }
      return token;
    },
    async session({ session, token }) {
      // 同步session过期时间与JWT一致
      if (token.exp) {
        session.expires = new Date(token.exp * 1000).toISOString();
      }
      return session;
    },
  },
};

2. 同步 Cookie 过期时间

为确保前端Cookie也同步过期,补充配置cookies选项:

export const authOptions: AuthOptions = {
  // ...其他配置
  cookies: {
    sessionToken: {
      name: `next-auth.session-token`,
      options: {
        httpOnly: true,
        sameSite: "lax",
        path: "/",
        secure: process.env.NODE_ENV === "production",
        // 设置Cookie过期时间为本地当前时间+1小时
        expires: new Date(Date.now() + 60 * 60 * 1000),
      },
    },
  },
};

3. 若使用数据库策略

如果会话存储在数据库中,创建会话时需将过期时间设置为本地时间+1小时对应的UTC时间,而非直接用UTC时间+3600秒:

// 示例:创建会话时设置正确过期时间
const localExpiry = new Date();
localExpiry.setHours(localExpiry.getHours() + 1);
const utcExpiry = new Date(localExpiry.toUTCString());

// 将utcExpiry存入数据库的会话过期字段

验证方法

设置完成后,可在浏览器开发者工具的Application标签中查看next-auth.session-tokenCookie的过期时间,确认是否为本地当前时间+1小时;同时在后端打印会话的expires字段,验证转换为本地时间后是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:55:37