Next.js使用Middleware+Next-Auth保护路由时出现登录循环问题求助
Next.js使用Middleware+Next-Auth保护路由时出现登录循环问题求助
大家好,我最近在做Next.js项目,想用Middleware配合Next-Auth来保护特定路由,本来预期是未认证用户访问这些路由时会被引导到登录页,但现在遇到了一个头疼的循环问题:就算我已经完成认证登录,访问/room/:id*这类路由时,还是会被重定向到登录页面;等我再次登录后,又会被跳转回目标路由,紧接着又触发重定向到登录页,无限循环下去。
我是按照Next-Auth文档来写的Middleware文件,代码如下:
export { default } from "next-auth/middleware"; export const config = { matcher: "/room/:id*" };
下面是我的Next-Auth API路由代码(app/api/auth/[...nextauth]/route.ts):
import NextAuth from "next-auth"; import GoogleProvider from "next-auth/providers/google"; import { PrismaClient } from "@prisma/client"; import { generateRandomString } from "@/utils/random"; const prisma = new PrismaClient(); const handler = NextAuth({ providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID!, clientSecret: process.env.GOOGLE_CLIENT_SECRET!, authorization: { params: { prompt: "consent", access_type: "offline", response_type: "code" } } }) ], secret: process.env.JWT_SECRET!, callbacks: { async signIn({ user, profile }) { const existingUser = await prisma.user.findUnique({ where: { email: user.email! } }); if (!existingUser) { const randomSuffix = generateRandomString(); const firstName = user.name?.split(" ")[0].toLocaleLowerCase(); await prisma.user.create({ data: { email: user.email!, name: user.name!, username: `${firstName}#${randomSuffix}`, image: user.image || profile?.image || null } }); } return true; }, async jwt({ token, user }) { if (user) { token.id = user.id; } return token; } } }); export { handler as GET, handler as POST };
有没有朋友遇到过类似的问题?或者能帮我排查下哪里可能出错了?
备注:内容来源于stack exchange,提问作者Abdulhameed Mustapha
相关产品推荐
相关产品推荐

