【发布时间】:2020-06-14 02:21:36
【问题描述】:
使用 JWT 构建一些基本的登录功能,我在设置 cookie 时遇到了错误...错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头
据我所见,这是因为中间件进入下一个而不是结束前一个......我只是在将常量数据分配给 json 响应时尝试了 res.end(data)。有什么建议吗?
router.post('/users/login', async (req, res) => {
try {
let userInput = {
email: req.body.email,
password: req.body.password
}
const userCheck = await User.findOne({ email: req.body.email })
if (!userCheck) {
res.json("No User with that email!")
} else {
const valid = await bcrypt.compare(req.body.password, userCheck.password)
if (!valid) {
res.json("Invalid password for " + userCheck.email)
} else {
try {
const refreshToken = jsonwebtoken.sign({ userId: userCheck._id }, process.env.REFRESH_TOKEN_SECRET, { expiresIn: '7d' })
const accessToken = jsonwebtoken.sign({ userId: userCheck._id, }, process.env.ACCESS_TOKEN_SECRET, { expiresIn: '15m' })
res.json("AccessToken: " + accessToken)
res.cookie("bearer", refreshToken, {
httpOnly: true
})
} catch (err) {
res.json("Error: " + err)
}
}
}
} catch (err) {
res.status(400).json("Error: " + err)
}
})
【问题讨论】: