中间件部署后无法访问cookie,但本地可以在下一个js中访问cookie

问题描述 投票:0回答:1

我有一个 NextJS 应用程序作为前端应用程序;对于后端,我使用 NodeJS ExpressJS 应用程序。在这里,我实现了基于 JWT 令牌的身份验证和授权。所以我从后端服务器设置唯一的 JWT 令牌。在前端服务器上,我正在访问令牌。如果我可以从 NextJS 应用程序访问令牌,那么我就允许用户访问私有路由。所以我的问题是,当我在本地运行应用程序时,它们运行良好,并且我没有遇到任何问题。但是部署后,它已经在前端浏览器中设置了cookie,但是当我尝试从前端访问私有路由时,它无法发送cookie。 MiddlewareJS 无法访问 cookie。

下一个js应用程序中的middleware.js:

import { NextResponse } from 'next/server';
import react from 'react';

const middleware = (req) => {

    let verify = req.cookies.get("jwt")
    let url = req.url
    if (!verify && url.includes("/dashboard")) {
       
        return NextResponse.redirect(`${process.env.NEXT_URL}/login`);
    }

};
export default middleware;

index.js 在 Express 应用程序中的作用:

if(process.env.NODE_ENV==="Production"){
  corsOptions = {
    credentials: true, origin:process.env.ORIGIN_URL 
  };
}else{
  corsOptions = {
    credentials: true, origin:true
  };
}

app.use(cors(corsOptions))

保护express js应用程序中的中间件:

const protect = asyncHandler(async (req, res, next) => {
  let token;
  token=req.cookies?.jwt
  console.log(token)
  if (token) {
    try {
      const decoded = jwt.verify(token, process.env.JWT_SECRET);
      console.log(decoded)
      req.user = await prisma.user.findFirst({
        where: {
          email: decoded.email,
        },

      });
      next();
    } catch (err) {
      res.status(401);
      throw new Error(`Not Authorized, Invalid Token`);
    }
  } else {
    res.status(401);
    throw new Error(`Not Authorized, No Token`);
  }
});

注意:这里我的 Next js 和后端位于不同的域中,后端和前端在 https 中运行。

怎样才能部署后运行没有问题,并且部署后中间件js将cookie访问到下一个js应用程序中? 有什么解决办法吗? 非常感谢。

javascript express next.js
1个回答
0
投票

您是否尝试过使用

cookies
中的
next/headers
访问 cookie?

import { cookies } from 'next/headers';
import { NextResponse } from 'next/server';

const middleware = (req) => {
   const cookieStore = cookies();
   const verify = cookieStore.get('jwt');

   // The rest of your code
};

export default middleware;
© www.soinside.com 2019 - 2024. All rights reserved.