如何使用next-auth/authjs nextjs/13/14按角色创建路由?

cwxwcias  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(132)

如何通过角色保护私有路由。也就是说,如果我是用户类型“user”,我可以访问/normal路由,如果我是admin,我可以访问/admin路由。也就是说,多个私有路由具有特定角色,官方文档只显示了单个路由的单个角色的示例。但我想要的是使其多个。

  • 中间件.ts*
import { withAuth } from "next-auth/middleware"

export default withAuth(
  // `withAuth` augments your `Request` with the user's token.
  function middleware(req) {
    console.log(req.nextauth.token)
  },
  {
    callbacks: {
      authorized: ({ token }) => token?.role === "admin",
    },
  }
)

export const config = { matcher: ["/admin"] }

字符串
以下是从官方next-auth文档https://next-auth.js.org/configuration/nextjs中提取的代码
我想要的是export const config = { matcher: ['/dashboard'] };应用于回调类型“user”,但我想根据用户的角色创建更多受保护的路由
我用nextjs 14

emeijp43

emeijp431#

让中间件应用于两个路由,并在authorized回调中检查访问的是哪一个,然后根据路径解析所需的角色。
一个非常简单的设置可能看起来像这样:

const AUTH_CONFIG = {
  '/admin': 'admin',
  '/normal': 'user',
};

export default withAuth(
  {
    callbacks: {
      authorized: ({ token, req }) => {
        const requiredRole = AUTH_CONFIG[req.nextUrl.pathname];
        return !requiredRole || token?.role === requiredRole;
      },
    },
  }
)

export const config = { matcher: ["/(admin|normal)"] }

字符串

相关问题