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

Next.js 13中如何在NextAuth配置里动态设置session的maxAge

如何将客户端stayLogin复选框值传递到NextAuth的session配置中

客户端登录时传递的stayLogin复选框值无法直接在NextAuth配置的session.maxAge中动态设置,可通过以下步骤实现:

步骤1:在CredentialsProvider中接收并传递stayLogin

修改CredentialsProvider的authorize方法,从credentials参数中获取stayLogin,并将其附加到返回的用户对象中:

async authorize(credentials: any) {
  if (!credentials) return null
  const variables = {
    "email": credentials?.email,
    "password": credentials?.password,
  }
  try {
    const user = await graphQLMutationClient(signIn, variables) as User;
    // 将stayLogin附加到返回的user对象
    return { ...user, stayLogin: credentials.stayLogin };
  } catch (error: any) {
    throw new Error(error.response?.errors[0]?.message.replace(/\./g, ""));
  }
  return null
}

步骤2:在JWT回调中动态设置token过期时间

在jwt回调内,根据stayLogin的值设置token的过期时间(示例:勾选时有效期7天,未勾选时2小时):

async jwt({ token, user }) {
  if (user) {
    const { stayLogin, ...restUser } = user;
    token.user = restUser;
    // 计算过期时间戳
    const expiresIn = stayLogin ? 7 * 24 * 60 * 60 : 2 * 60 * 60;
    token.exp = Math.floor(Date.now() / 1000) + expiresIn;
  }
  return token;
}

步骤3:调整session配置

由于JWT策略下,session的实际有效期由token的exp字段决定,因此可以移除session配置中的静态maxAge:

session: {
  strategy: 'jwt',
  // 移除静态maxAge,由token的exp动态控制有效期
},

可选:在session回调中传递stayLogin(若前端需要)

如果前端需要获取stayLogin状态,可在jwt回调中存入token,再在session回调中传递给session对象:

// jwt回调补充
token.stayLogin = user.stayLogin;

// session回调修改
async session({ session, token }) {
  session.user.isLoggedIn = true;
  session.stayLogin = token.stayLogin;
  return session;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:17:29