Node.js | Express+MongoDB 实现简易用户管理系统(登录验证之Cookie&Session)
const express = require('express');
const router = express.Router();
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const User = require('../models/user');
// 登录接口
router.post('/login', async (req, res) => {
const { username, password } = req.body;
// 查询数据库中是否有对应用户
const user = await User.findOne({ username: username });
if (!user) {
return res.status(401).json({ message: '用户不存在' });
}
// 比对密码
const valid = await bcrypt.compare(password, user.password);
if (!valid) {
return res.status(401).json({ message: '密码错误' });
}
// 密码正确,生成token
const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET);
// 将token设置在cookie中,同时设置httpOnly为true防止XSS攻击
res.cookie('jwt', token, { httpOnly: true, maxAge: 60000 });
res.status(200).json({ message: '登录成功', token: token });
});
module.exports = router;
在这个代码实例中,我们修复了原代码中的安全问题,通过设置httpOnly为true来防止通过document.cookie直接访问cookie,增加了token的有效期,并修正了一些语法问题。这样,我们就能更安全地在客户端和服务器之间传递认证信息了。
评论已关闭