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

Next-Auth中间件问题:未认证用户无法访问注册页面

问题解决:Next-Auth中间件阻止未认证用户访问注册页

问题原因

你当前的代码中,withAuth中间件会对匹配的/login和/register路由进行强制认证校验——未认证用户访问这些路由时,会自动跳转到signIn配置的/login页面,这直接导致未认证用户无法进入注册页。同时原代码仅单独处理了/login的已认证重定向逻辑,未覆盖/register的情况。

修复后的代码

import { getToken } from 'next-auth/jwt'
import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'

export default async function middleware(
    req: NextRequest,
    event: NextFetchEvent
) {
    const token = await getToken({ req })
    const isAuthenticated = !!token
    const currentPath = req.nextUrl.pathname

    // 处理登录/注册路由:已认证用户禁止访问,未认证用户直接放行
    if (currentPath === '/login' || currentPath === '/register') {
        if (isAuthenticated) {
            return NextResponse.redirect(new URL('/profile', req.url))
        }
        return NextResponse.next()
    }

    // 如需保护其他路由(比如/profile),可在此添加withAuth逻辑
    // const authMiddleware = withAuth({
    //     pages: {
    //         signIn: '/login',
    //     },
    // })
    // return authMiddleware(req, event)
}

export const config = {
    matcher: ['/login', '/register', '/profile'], // 按需添加需要保护的路由
}

逻辑说明

  1. 认证状态判断:通过getToken获取用户令牌,判断是否已认证
  2. 登录/注册路由处理:
    • 已认证用户访问/login或/register时,直接重定向到个人中心/profile
    • 未认证用户访问时,直接放行,允许进入登录或注册页面
  3. 其他路由保护:如果有需要强制认证的路由(如/profile),可取消注释withAuth相关代码,实现未认证用户自动跳转到登录页的逻辑

内容的提问来源于stack exchange,提问作者ponwock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:13:19