
具体详细的代码可以看我的个人github
校验登录信息
// 命中登录路由
function loginRouter(req, res) {
const promsie = new Promise((resolve, reject) => {
if(req.path === '/api/user/login') {
// 拿到password, username
const { password, username } = req.body
// 查询数据库
login(username, password).then(result => {
if(result) {
resolve({username}, new SuccessModel('登录成功'))
}
}).catch(err => {
reject(new ErrorModel('登录失败'))
})
}
})
return promsie
}
// 查询数据库业务处理逻辑
const login = (username, password) => {
const sql = `select username, realname from users where password='${password}' and username='${username}'`
return exec(sql).then(rows => {
return rows[0] || {}
})
}
保存用户信息,设置cookie
if(req.path === '/api/user/login') {
const { password, username } = req.query
login(username, password).then(result => {
if(result.username) {
let suid = req.cookie.suid || ''
if(suid === '') {
const session = {
username: result.username,
realname: result.realname
}
// 随机生成一个suid
suid = `${Date.now()}_${Math.random()}`
console.log(session)
// 登录成功,存用户信息到redis
set(suid, session)
// 设置cookie
res.setHeader('Set-Cookie', `suid=${suid}; path=/; httpOnly; expires=${getCookieExpires()}`)
}
resolve(new SuccessModel('登录成功'))
} else {
reject(new ErrorModel('密码错误'))
}
}).catch(err => {
reject(new ErrorModel('登录失败'))
})
}
测试接口
if(req.path === '/api/user/test') {
console.log(req.session.username)
resolve(
new SuccessModel({
username: req.session.username
})
)
}
这篇博客详细介绍了如何用Node.js处理登录验证。通过查询数据库校验用户名和密码,成功登录后,利用随机生成的suid保存用户信息到Redis,并设置HTTP Only的Cookie。同时,还提供了测试接口来展示如何获取登录用户的username。
214

被折叠的 条评论
为什么被折叠?



