如何使用Next.js 13处理授权

hlswsv35  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(291)
    • 初始情况:**我有两个服务器端cookie(仅限httponly),分别名为 * accessToken * 和 * refreshToken *。
{
   "user":{
      "firstname":"John",
      "lastname":"Doe",
      "roles":[
         "accounting",
         "supporter"
      ]
   }
}
    • 目标:**使用Next.js 13(基于应用文件夹)处理服务器端授权。一些路由应该受到保护,并且只有具有特定角色的用户才能访问。
    • 示例:**
  • GET/login应该是每个人都可以访问的
  • GET/ Jmeter 板仅供授权用户使用
  • GET/accounting仅适用于具有 * accounting * 角色的用户
  • GET/admin仅适用于角色为 * admin * 的用户
2w2cym1i

2w2cym1i1#

你可以写一个中间件。在next13中,中间件文件与package.json在同一个目录中,它应该是middleware.js(或.ts)。

export async function middleware(req: NextRequest, res: NextResponse) {
  // get all the cookies
  let cookies = req.cookies.getAll();
  // read those cookies. based on cookies you decide which paths can be visited
  const isAuthorized="define logic if the the user authorized"
  console.log("req.pathname", req.nextUrl.pathname);
  const currentPath = req.nextUrl.pathname;
  if (currentPath==="/dashboard" && isAuthorized ){
    // you allow the user to visit this page
    return NextResponse.next()
  }
  // similarly add logic for other cases 
}

相关问题