我在構建 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但是當我只運行我的后端而不運行我的客戶端應用程式時我該怎么辦?我不想有單獨的代碼。如果我需要澄清我在這里所說的內容,請告訴我。
uj5u.com熱心網友回復:
對你的問題有一定的了解。首先你的節點服務器和你的反應服務器不會在同一個埠上運行。因此,服務器 cookie 將無法正常作業。您也應該設定域。如果您的反應服務器和節點服務器在該域上運行并且它是域,那么它們可以共享 cookie。
通過 axios 向帶有授權頭的節點服務器發送請求的示例:
axios.post("https://<api>.com", {
headers: {
Authorization: 'Bearer <your-bearer-token>'
}
})
郵遞員這樣寄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/370050.html
上一篇:反應路由器Dom
