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

Next.js 14集成Next-Auth 4遇500错误及req.query解构问题求助

问题排查与修复方案

核心问题:缺失NextAuth路由处理文件

你碰到的TypeError: Cannot destructure property 'nextauth' of 'req.query' as it is undefined,根本原因是Next.js找不到NextAuth的API路由处理器,导致请求无法被正确解析。

在Next.js 14的App Router模式下,必须创建app/api/auth/[...nextauth]/route.ts文件,用来导出NextAuth的请求处理逻辑。创建该文件并填入以下代码:

import NextAuth from "next-auth";
import { authOptions } from "@/path/to/your/auth.ts"; // 替换成你的auth.ts实际路径

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };

修复CredentialsProvider的fetch请求错误

你的authorize函数里的fetch请求有两个明显问题,会导致后端无法正确接收参数,进而引发认证失败返回500:

  • 未设置Content-Type: application/json请求头
  • 请求体直接传对象,未转为JSON字符串

修改后的authorize函数代码:

async authorize(credentials) {
  try {
    console.log('Received credentials:', credentials);
    const response = await fetch("http://localhost:4001/v1/auth/login", {
      method: "POST",
      headers: {
        "Content-Type": "application/json", // 新增JSON请求头
      },
      body: JSON.stringify({ // 将参数转为JSON字符串
        email: credentials?.email ?? '',
        password: credentials?.password ?? '',
      }),
    });

    console.log('Response status:', response.status);
    const data = await response.text();
    console.log('Response data:', data);

    if (response.ok) {
      const user = JSON.parse(data);
      if (user) {
        return user;
      }
    }
    return null;
  } catch (error) {
    console.error('Error during authentication:', error);
    return null;
  }
}

验证环境变量配置

确保你的.env文件里正确设置了AUTH_SECRET,可以用下面的命令生成一个安全的密钥:

openssl rand -hex 32

把生成的字符串赋值给AUTH_SECRET,避免因为密钥缺失导致会话签名失败。

适配App Router的getServerSession导入

在Next.js 14的App Router中,getServerSession需要从next-auth/next导入,而不是next-auth。修改你的auth.ts中的导入语句:

import { NextAuthOptions } from 'next-auth';
import { getServerSession } from 'next-auth/next'; // 调整导入路径

做完以上所有步骤后,重启开发服务器,会话初始化请求应该能返回200,同时nextauth解构的错误也会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:13:24