You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:00:07