我正在尝试将JWT存储在浏览器的Cookie中,以便可以继续使用它来通过受保护的路由进行API调用。
下面的代码是一个登录脚本(不进行错误处理,以使其在此处易于阅读),该脚本检查用户的电子邮件和密码是否与数据库中的电子邮件和密码匹配。
const auth = (req, res) => {
const { email, password } = req.body
User.findOne({ email }, async (err, user) => {
// If password is correct, create token and send it back
if (user && bcrypt.compareSync(password, user.password)) {
const token = await jwt.sign(
{ id: user._id },
config.auth.secret,
{ expiresIn: config.auth.expireTime }
)
res
.status(200)
.cookie('access_token', token, {
secure: false,
maxAge: 120000,
httpOnly: false,
})
.json({
message: 'User found',
user
})
return
}
// Wrong email or password
res.status(401).json({ message: 'Wrong Email/Password', data: null })
})
return
}
我将cookie设置为httpOnly: false
,因为我认为这是浏览器能够读取它的唯一方法。这是我登录后在浏览器中看到的:
没有cookie。
答案 0 :(得分:1)
我不是从后端发送cookie,而是在登录时将其发送到响应标头中,然后使用以下程序包将cookie存储在前端: https://www.npmjs.com/package/js-cookie
现在,登录后我可以在以后的API调用上重用cookie(对于我来说,是要提取待办事项,文件夹等)。