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

Next.js 13集成next-auth时signOut失效,提示无导出HTTP方法

NextAuth登出功能失效问题修复

问题情况

之前能正常运行的登出代码:

"use client"
import { signIn, signOut } from "next-auth/react";
<button onClick={() => signOut()}>Logout</button>

现在无法完成登出,服务器终端报错:
No HTTP methods exported in '/Users/.../app/api/auth/[...nextauth]/route.ts'. Export a named export for each HTTP method.
Chrome控制台显示POST请求/api/auth/signout返回405 Method Not Allowed错误。

当前Auth配置代码

import { PrismaAdapter } from "@next-auth/prisma-adapter";
import NextAuth, { type NextAuthOptions, User } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import bcrypt from "bcrypt";
import { db } from "@/lib/prisma";

export const authOptions: NextAuthOptions = {
  adapter: PrismaAdapter(db as any),
  session: {
    strategy: "jwt",
  },
  secret: process.env.NEXTAUTH_SECRET as string,
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID ?? "",
      clientSecret: process.env.GOOGLE_CLIENT_SECRET ?? "",
    })
  ],
  callbacks: {
    async session({ token, session }: { token: any; session: any }) {
      if (token) {
        session.user.id = token.id;
        session.user.name = token.name;
        session.user.email = token.email;
        session.user.image = token.picture;
      }

      return session;
    },
    async jwt({ token, user }: { token: any; user: any }) {
      const dbUser = await db.user.findUnique({
        where: {
          email: token.email,
        },
      });

      if (!dbUser) {
        if (user) {
          token.id = user?.id;
        }
        return token;
      }

      return {
        id: dbUser.id,
        name: dbUser.name,
        email: dbUser.email,
        picture: dbUser.image,
      };
    }
  }
};

修复方案

问题出在app/api/auth/[...nextauth]/route.ts文件中,仅导出了authOptions但未导出HTTP请求处理函数。在Next.js App Router模式下,NextAuth需要显式导出GET和POST方法来处理认证相关请求。

修改route.ts文件,添加请求处理函数的导出:

import NextAuth from "next-auth";
import { authOptions } from "./auth"; // 若authOptions就在当前route.ts文件内,可移除该行导入

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };

这样就能让NextAuth处理包括登出在内的所有认证请求,解决405错误和登出失效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:43:26