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

NextJS14中NextAuth会话销毁及TypeScript类型错误求助

修复TypeScript类型错误(错误代码2322)

问题根源在于session回调返回null违反了TypeScript类型约束——NextAuth的session回调要求返回Session | DefaultSession类型,不允许返回null。正确做法是抛出错误标记会话过期,而非返回null,这样NextAuth会自动触发登出流程并跳转至登录页。

修改你的session回调代码:

async session({ token, session }) {
  session.user.name = token.userInfo.nameSurname;
  session.user.email = token.userInfo.email;
  session.user.userName = token.userInfo.userName;
  session.accessToken = token.accessToken;
  session.expiration = new Date(token.expiration).toISOString();
  session.expires = new Date(token.expiration).toISOString();
  const currentDate = new Date();
  const expirationDate = new Date(token.expiration);

  if (currentDate < expirationDate) {
    console.log('会话有效');
    return session;
  } else {
    console.log('会话过期');
    // 抛出错误触发自动登出
    throw new Error('Session expired');
  }
}

在NextJS14中销毁NextAuth会话

销毁会话分两种场景处理:

1. 客户端主动销毁会话

直接使用next-auth/react提供的signOut函数,可在任意客户端组件中调用:

import { signOut } from 'next-auth/react';

// 示例:点击按钮触发登出
const handleSignOut = () => {
  signOut({ 
    redirect: true, 
    callbackUrl: '/Login' // 登出后跳转的目标页面
  });
};

2. 服务端销毁会话

在API路由或服务器组件中,使用next-auth/next/server的signOut函数:

import { signOut } from 'next-auth/next/server';
import { authOptions } from './[...nextauth]/route'; // 导入你的认证配置

export async function POST(request: Request) {
  // 执行登出并跳转
  return signOut({ 
    redirect: true, 
    callbackUrl: '/Login',
    authOptions // 传入自定义的认证配置
  });
}

额外提示

  • 若希望会话过期时自动刷新token而非直接登出,可在jwt回调中调用后端的刷新token接口,更新token的有效期和accessToken字段。
  • 确保next-auth.d.ts中的类型声明完全覆盖自定义字段,避免其他潜在类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:05:10