我正在尝试根据角色将用户重定向到特定页面,使用以下代码在middleware.ts文件中:
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
import { getToken } from 'next-auth/jwt'
export async function middleware(request: NextRequest) {
const token = await getToken({
req: request,
secret: process.env.JWT_SECRET
}) as any
if (token !== null && token.user.role === "admin") {
if (request.nextUrl.pathname.startsWith('/admin')) {
return NextResponse.next()
}
else {
return NextResponse.redirect(new URL('/admin', request.url))
}
}
}
/* export const config = {
matcher: [
// "/login",
// "/register",
// "/",
// "/admin"
],
} */
从文档中我所理解的是它将运行所有路由,但我收到了以下错误信息:
Uncaught SyntaxError: Unexpected token '<
然而,如果我将匹配器包含在中间件文件中,它将按预期工作:
export const config = {
matcher: [
"/login",
"/register",
"/",
"/admin"
],
}
这个错误有解决方法吗?还是只需将所有页面添加到匹配器数组中?
'/((?!api|_next/static|_next/image|favicon.ico).*)'
添加到匹配器中就像文档中一样修复了它。 - Mohammad