【发布时间】:2022-01-06 21:48:54
【问题描述】:
我正在构建的 MERN 应用程序遇到问题。当我注册/登录用户时,我在 cookie 中存储了一个令牌。我可以通过我的 express 应用程序很好地访问此 cookie,并且在使用 Postman 时一切正常。
现在我遇到的问题是当我尝试通过 React 中的客户端访问受保护的路由时。我不知道如何正确处理这个问题,因为在我的快递应用程序中,我无法在使用邮递员时同样的事情中获取 cookie。我正在使用httpOnly: true,因此只能从我的快速应用程序访问 cookie。出于安全原因,我想保持httpOnly 的状态,所以我不想通过我的客户端访问令牌。
这是我在快递应用上的代码...
exports.protect = catchAsync(async (req, res, next) => {
let token;
if (
req.headers.authorization &&
req.headers.authorization.startsWith('Bearer')
) {
token = req.headers.authorization.split(' ')[1];
}
console.log(req.headers);
if (!token) {
return next(new AppError('No token found!', 401));
}
const decoded = await promisify(jwt.verify)(token, process.env.JWT_SECRET);
const freshUser = await User.findById(decoded.id);
if (!freshUser) {
return res.status(401).json({
status: 'fail',
message: 'This token no longer exists!',
});
}
req.user = freshUser;
next();
});
当我尝试使用邮递员使用req.headers.authorization 访问令牌时,它可以工作,但就像我在使用我的客户端反应应用程序之前提到的那样,它没有,而是undefined。使用req.headers 我可以看到cookies。我觉得我可以访问req.headers.cookies,但是当我只运行我的后端而不运行我的客户端应用程序时我该怎么办?我不想有单独的代码。如果我需要澄清我在此所说的内容,请告诉我。
【问题讨论】:
标签: reactjs express cookies jwt mern