浏览器在获取请求 javascript 后未设置 cookie



所以第一次运行这段代码时,浏览器设置了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标头。

最新更新