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

next-auth@4.22.1登录报错:API handler不应返回值,接收对象

问题解决步骤

1. 修复NextAuth API路由写法(核心问题)

你看到的API handler should not return a value, received object错误,大概率是NextAuth路由文件的位置或写法不符合当前Next.js路由规则:

  • 若使用Pages Router:
    确保[...nextauth].ts放在pages/api/auth/目录下,你当前的代码写法是正确的,只需确认文件中没有额外导出其他返回值的函数。

  • 若使用App Router:
    将路由文件移至app/api/auth/[...nextauth]/route.ts,并修改代码为:

    import NextAuth from "next-auth";
    import { authOptions } from "@/lib/mongodbadapter"; // 根据你的实际路径调整
    
    const handler = NextAuth(authOptions);
    export { handler as GET, handler as POST };
    

    App Router的API路由要求导出GET/POST等方法,且处理函数必须返回Response类型,不能直接默认导出NextAuth实例。

2. 验证MongoDB Adapter连接

虽然数据库已有用户数据,仍需确认clientPromise实现正确:

  • 检查MongoDB连接字符串是否包含正确的用户名、密码和集群地址;
  • 确保clientPromise是返回MongoClient实例的函数,示例正确写法:
    import { MongoClient } from "mongodb";
    
    const uri = process.env.MONGODB_URI!;
    const options = {};
    
    let client;
    let clientPromise: Promise<MongoClient>;
    
    if (!process.env.MONGODB_URI) {
      throw new Error("请在.env.local中添加Mongo URI");
    }
    
    if (process.env.NODE_ENV === "development") {
      if (!global._mongoClientPromise) {
        client = new MongoClient(uri, options);
        global._mongoClientPromise = client.connect();
      }
      clientPromise = global._mongoClientPromise;
    } else {
      client = new MongoClient(uri, options);
      clientPromise = client.connect();
    }
    
    export default clientPromise;
    

3. 确认SessionProvider的正确使用

  • 确保导入的是next-auth/react中的SessionProvider;
  • 在Pages Router的_app.tsx中,确认session参数正确传递,当前写法没问题,可添加类型校验避免隐式any:
    import { AppProps } from "next/app";
    import { SessionProvider } from "next-auth/react";
    
    export default function App({ Component, pageProps: { session, ...pageProps } }: AppProps) {
      return (
        <SessionProvider session={session}>
          <Navbar />
          <Component {...pageProps} />
        </SessionProvider>
      );
    }
    

4. 检查环境变量与Session配置

  • 确认.env.local中所有OAuth服务商密钥(DISCORD_CLIENT_ID、DISCORD_CLIENT_SECRET等)填写正确,无拼写错误;
  • 在authOptions中显式指定session策略(使用adapter时默认是database,显式设置更稳妥):
    export const authOptions: AuthOptions = {
      adapter: MongoDBAdapter(clientPromise),
      session: { strategy: "database" },
      providers: [/* 你的服务商配置 */]
    };
    

5. 验证getServerSession调用

在getServerSideProps中,确保authOptions导入路径正确,参数传递无误,当前写法可添加类型优化:

import { GetServerSidePropsContext } from "next";
import { getServerSession } from "next-auth/next";
import { authOptions } from "../pages/api/auth/[...nextauth]"; // 根据实际路径调整

export async function getServerSideProps(ctx: GetServerSidePropsContext) {
  const session = await getServerSession(ctx.req, ctx.res, authOptions);
  console.log(session); // 用于调试
  return {
    props: { session }
  };
}

完成以上步骤后重启开发服务器,测试登录流程即可解决错误并正常获取session。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:32:01