Next.js cookie 无法通过路由器中间件

Koo*_*866 8 authentication cookies middleware next.js

我正在尝试使用新的 Next.Js 12 中间件功能创建一些路由保护。我的身份验证基于 cookie 上设置的 JWT 令牌。我之前已经使用 Next.Js 上的 API 后端实现了这一点,没有出现任何问题,而且当点击 API 路由时,cookie 仍会在请求中持续存在,没有问题。

当它从服务器请求静态页面时,就会出现我的问题。没有附加 cookie,因此我无法确定用户是否经过身份验证,并且始终重定向到登录页面。例如,对http://localhost:3000/(主页)的请求不会向中间件发送任何 cookie。但是,http://localhost:3000/api/user会向中间件发送一个 cookie。我在文档中是否遗漏了一个设置来允许这种情况发生?

不确定是否有帮助,但这是我_middleware.ts位于页面根部的文件。

import type { NextFetchEvent, NextRequest } from 'next/server';
import { NextResponse } from 'next/server';

const middleware = (req: NextRequest, ev: NextFetchEvent) => {
  console.log(req.cookies);
  console.log(req.cookies['user']);
  console.log(req.nextUrl.pathname);
  if (req.nextUrl.pathname === '/') {
    return NextResponse.redirect('http://localhost:3000/login');
  }
};

export default middleware;
Run Code Online (Sandbox Code Playgroud)

Yil*_*maz 6

Next.js > 12.2

req.cookies.get("user")
Run Code Online (Sandbox Code Playgroud)

在 Next.js 12.2 之前,

req.cookies?.user
Run Code Online (Sandbox Code Playgroud)


小智 0

我有同样的问题。我使用标签进行路由并且它有效,但我不确定它是一个不错的选择。