Next.js v15.0.1 集成 NextAuth.js v5.0.0-beta.25 编译报错:Unknown module type(中间件调用auth获取会话数据时触发)
Next.js v15.0.1 集成 NextAuth.js v5.0.0-beta.25 编译报错:Unknown module type(中间件调用auth获取会话数据时触发)
嗨,看了你遇到的这个报错,核心原因是NextAuth v5的auth()函数在middleware里的调用方式完全错了,加上没处理异步逻辑,才触发了这个“Unknown module type”的奇怪错误。我给你梳理下修复步骤:
1. 修正auth()的调用逻辑(最关键)
NextAuth v5的auth()是异步函数,而且必须把request对象传进去——它需要从请求里读取cookie、headers这些信息来生成会话数据。你之前既没传request,也没加await,导致内部逻辑直接炸了,才抛出模块类型的错误。
把你的middleware.js改成这样:
import { NextResponse } from 'next/server'; import { auth } from './auth'; // 必须加async,因为auth()是异步函数 export async function middleware(request) { // 传入request,并用await拿到实际的会话数据 const session = await auth(request); const token = request.cookies.get('authjs.session-token'); console.log('token', token); console.log('session data:', session); return NextResponse.next(); } export const config = { matcher: ['/login', '/signup'], };
2. 确认模块格式兼容性
你的next.config.mjs是ES模块格式,目前你的auth.js和middleware.js都用了import/export,符合ES模块规范,这部分没问题,不用改。
3. 额外提醒:检查authorize函数的返回值(避免后续会话问题)
虽然不是当前报错的原因,但要确保你的authorizeUser函数返回的是符合要求的用户对象(比如包含id、email这些字段)或者null,不然就算当前报错解决了,后续获取会话数据也可能出问题。
改完之后重启项目,应该就能正常打印会话数据,不会再出现那个模块类型的报错了。
备注:内容来源于stack exchange,提问作者Disala Yuthmira
相关产品推荐
相关产品推荐

