NextJS 13.4 Github登录报错:getUserByAccount未定义及API返回问题
针对NextJS 13.4 Github登录问题的解决方案
问题1:OAuth回调报错“getUserByAccount is not a function”
这个错误核心原因是NextAuth配置中适配器未正确集成,或authorize函数里错误调用了未定义的getUserByAccount方法。
解决步骤:
- 如果你使用Prisma/Drizzle等官方适配器,确保已正确安装并配置到
/pages/api/auth/[...nextauth].ts中:import NextAuth from "next-auth"; import GithubProvider from "next-auth/providers/github"; import { PrismaAdapter } from "@next-auth/prisma-adapter"; import prisma from "@/lib/prisma"; export default NextAuth({ adapter: PrismaAdapter(prisma), // 必须配置适配器才能使用内置的用户查询方法 providers: [ GithubProvider({ clientId: process.env.GITHUB_ID!, clientSecret: process.env.GITHUB_SECRET!, }), ], // 自定义authorize逻辑时,需从context.adapter中获取方法 async authorize(credentials, context) { const user = await context.adapter?.getUserByAccount({ provider: "github", providerAccountId: credentials?.accountId, }); return user; }, }); - 若未使用适配器,需自行实现
getUserByAccount函数,不能直接调用NextAuth内置方法。
问题2:“API handler should not return a value, received object”提示
该错误出现在App Router的API路由(如/app/api/register/route.ts)中,因为NextJS 13.4的App Router要求用Response对象返回结果,而非直接返回JSON对象。
修改/app/api/register/route.ts代码:
- 错误写法(Pages Router风格):
export async function POST(request: Request) { const data = await request.json(); // 注册逻辑处理... return { status: 200, json: () => ({ message: "注册成功" }), }; } - 正确写法(App Router兼容):
export async function POST(request: Request) { const data = await request.json(); // 注册逻辑处理... return new Response(JSON.stringify({ message: "注册成功" }), { status: 200, headers: { "Content-Type": "application/json" }, }); } - 注意:
/pages/api/auth/[...nextauth].ts属于Pages Router路由,无需修改返回方式,NextAuth会自动处理。
额外检查项
- 执行
npm update next-auth确保NextAuth版本与NextJS 13.4兼容。 - 核对环境变量(
GITHUB_ID、GITHUB_SECRET等)是否配置正确,避免因变量缺失引发间接错误。
内容的提问来源于stack exchange,提问作者Jadeja Harshvardhansinh
相关产品推荐
相关产品推荐

