Next-Auth中间件未跳转至登录页问题求助
Next-Auth 未自动跳转登录页的排查与修复
你的配置存在几个关键缺失,导致middleware无法正确检测会话状态并触发登录跳转,以下是具体修复步骤:
1. 必须添加 NEXTAUTH_SECRET 环境变量
Next-Auth 需要该密钥加密会话数据,缺失会导致会话验证失效,middleware无法识别用户是否已登录。
在项目根目录的 .env.local 文件中添加:
NEXTAUTH_SECRET=your-secret-key-here
可通过 openssl rand -hex 32 命令生成安全密钥。
2. 为 Middleware 配置路由匹配规则
虽然官方文档说明默认保护全站,但显式指定匹配规则能确保所有页面路由被覆盖,避免遗漏。修改 src/app/middleware.ts:
export { default } from "next-auth/middleware"; // 排除静态资源与API路由,保护所有页面路由 export const config = { matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"], };
3. 为 CredentialsProvider 配置 Session 策略
使用 CredentialsProvider 时,默认会话策略为 database,但你未配置数据库,必须改为 jwt。修改 src/lib/auth-options.ts:
import { AuthOptions } from 'next-auth'; import CredentialsProvider from "next-auth/providers/credentials"; const authOptions: AuthOptions = { debug: true, // 新增Session配置,指定jwt策略 session: { strategy: "jwt", }, providers: [ CredentialsProvider({ name: "Credentials", credentials: { email: { label: "Email", type: "text", placeholder: "email@vansite.eu" }, password: { label: "Password", type: "password" } }, async authorize(credentials, req) { // 注意:当前代码无论输入什么都会返回用户,后续需完善实际验证逻辑 const user = { id: "1", name: "J Smith", email: "jsmith@example.com" } if (user) { return user } else { return null } } }) ] } export default authOptions;
4. 可选:显式配置登录页面路径
在 authOptions 中添加 pages 配置,明确指定登录页路径,避免路由解析错误:
const authOptions: AuthOptions = { // ...其他配置 pages: { signIn: "/api/auth/signin", }, // ...其他配置 }
完成以上修改后重启开发服务器,访问 http://localhost:3000 即可自动跳转到登录页。另外注意你当前的 authorize 方法无实际验证逻辑,后续需补充账号密码校验逻辑。
内容的提问来源于stack exchange,提问作者DK1990
相关产品推荐
相关产品推荐

