cookie未保存在浏览器-Nodejs中



我正在尝试使用axios npm包访问登录api这是我的api urlhttp://127.0.0.1:3000/api/v1/users/login'

javascript代码

const login = async (email, password) => {
console.log(email, password);
try {
const res = await axios({
method: 'POST',
url: 'http://127.0.0.1:3000/api/v1/users/login',
data: {
email, password
}, 
});
console.log(res);
} catch (err) {
console.log(err.response.data.message);
}

};

当我们在邮递员中使用api时,cookie已经保存并显示,但当我使用axios使用此api时,浏览器中没有保存。

登录api代码

使用jwt创建令牌

const signToken = (id) => {
return jwt.sign({ id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRE_IN,
});
};

使用res.cookie创建登录令牌并设置cookie

const createSignToken = (user, statusCode, res) => {
const token = signToken(user._id);

const cookieOption = {
expires: new Date(Date.now() + process.env.JWT_COOKIE_EXPIRE_IN*24*60*60*1000),
httpOnly: true

}
if (process.env.NODE_ENV === 'production') cookieOption.secure = true;
res.cookie('jwt',token, cookieOption);


//remove password from the output 
user.password = undefined;
res.status(statusCode).json({
status: 'success',
token,
data: {
user,
},
});
};

exports.login = catchAsync(async (req, res, next) => {
const { email, password } = req.body;
//if email and password exits
if (!email || !password) {
return next(new AppError('please provide email and password', 400));
}
//check if user exit and password correct
// const user=User.find({email:email})
const user = await User.findOne({ email }).select('+password');

if (!user || !(await user.correctPassword(password, user.password))) {
return next(new AppError('email or password wrong', 401));
}
//if everything  ok send token to client

createSignToken(user, 200, res);

});

我建议添加axioswithCredentials: true选项,以便它始终发送cookie。

const login = async (email, password) => {
console.log(email, password);
try {
const res = await axios({
withCredentials: true,                          // <=== Add this
method: 'POST',
url: 'http://127.0.0.1:3000/api/v1/users/login',
data: {
email, password
}, 
});
console.log(res);
} catch (err) {
console.log(err.response.data.message);
}

};

如果这不能解决问题,那么cookie可能不属于http://127.0.0.1:3000来源,因此浏览器不会发送它们。

我以前也遇到过同样的问题,这是因为我使用了"localhost";的";127.0.0.1";而不是在浏览器上的链接中,所以请确保您的浏览器链接是";http://127.0.0.1:3000/login">

最新更新