所以第一次运行这段代码时,浏览器设置了cookie。但是当我从浏览器中清除cookie并尝试再次运行代码时,浏览器不再设置cookie。我尝试了多个浏览器,但它不起作用。获取请求成功,我可以在控制台中打印 cookie 值,但浏览器不会设置 cookie。这是一个非常烦人的问题。我也尝试使用凭据:"包括",但它不起作用。收到 CORS 错误。
我对Web开发很陌生,所以我的知识不是很深。
这是我前端的代码
let reqObj = {
//check email to see if it is a valid format in the login.html user email input
//name: name.value,
email: email.value,
password: password.value
}
const response = await fetch(api_url + "api/user/login", {
method: 'POST',
body: JSON.stringify(reqObj),
headers: {
'Content-Type': 'application/json'
},
credentials: 'same-origin'
});
const jwt = await response.text();
console.log(jwt)
这是快速服务器代码
router.post('/login', async (req, res) => {
//validate data
const { error } = loginValidation(req.body)
if (error) return res.status(400).send(error.details[0].message);
//checking if email is in database
const user = await User.findOne({ email: req.body.email });
if (!user) return res.status(400).send('Email or password is incorrect')
//Password is correct
const validPass = await bcrypt.compare(req.body.password, user.password)
if (!validPass) return res.status(400).send('Invalid password')
// Create and assign a token
const token = jsonWebToken.sign({ _id: user.id }, process.env.TOKEN_SECRET);
//res.header('auth-token', token).send(token);
res.cookie('auth_token', token, {
maxAge: 3600,
httpOnly: true
}).send(token)
});
module.exports = router;
我相信为了使用credentials: 'include'
,您必须在响应中添加Access-Control-Allow-Credentials
标头。