我有一个 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应用程序中? 有什么解决办法吗? 非常感谢。
您是否尝试过使用
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;