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

如何使用NextAuth实现简单的受保护路由?

NextAuth 受保护路由实现方案

1. 新建中间件文件

在项目根目录(或src目录下)创建middleware.ts,用NextAuth的中间件管控路由访问规则。

2. 写入路由逻辑代码

import { withAuth } from "next-auth/middleware"
import { NextResponse } from "next/server"

export default withAuth(
  function middleware(req) {
    const { pathname } = req.nextUrl
    const isLoggedIn = req.nextauth.token !== null

    // 已登录用户访问登录/注册页,直接跳转到个人中心
    if (isLoggedIn && (pathname === "/signin" || pathname === "/signup")) {
      return NextResponse.redirect(new URL("/profile", req.url))
    }

    // 未登录用户访问个人中心,跳转到登录页
    if (!isLoggedIn && pathname === "/profile") {
      return NextResponse.redirect(new URL("/signin", req.url))
    }
  },
  {
    // 指定需要中间件处理的路由
    matcher: ["/profile", "/signin", "/signup"],
    // Credentials Provider需开启此项,避免默认校验拦截请求
    authorized: () => true,
  }
)

3. 额外说明

  • 像/shop这类中性路由,因为不在matcher数组范围内,所以无论用户是否登录都能直接访问,无需额外配置。
  • 你现有的[...nextauth].ts代码逻辑正常,已经实现了用户校验和JWT会话功能,不需要修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:01:17