- 检测表单数据是否合法
- 根据用户名查询用户的数据(在数据库中)
- 判断用户输入的密码是否正确(密码和数据库中的密码是否匹配)
- 生成 JWT 的 Token 字符串(服务器端生成,响应给客户端)——可以通过Token实现客户端的身份认证
检测表单数据是否合法
由于前面注册模块的时候已经使用了注册的验证规则,和验证的操作,与注册具有相同的数据的规则的登录模块所使用的包也是一样:
//监听客户端登录的请求
Router.post('/login',expressJoi(schema),user_hander.login)
根据用户名查询用户的数据-在数据库中查找+接收表单数据
select__
//这是登录的处理函数
const login=function(req,res){//post
userInfo=req.body//接收表单数据
//定义查询用户的SQL语句
const sqlStr='select * from ev_users where username= ?'
db.query(sqlStr,userInfo.username,(err,results)=>{
//执行SQL语句失败_
if(err) return res.cc(err)
//判断查询失败
if(results.length!==1)return res.cc('用户名不存在,请重新登录!')
//密码的验证
res.send('登录OK')//响应给客户端的话
})
}
判断用户输入的密码是否正确(密码与数据库中的密码是否匹配,需要表单数据)
select数据库的结果是数组,查出的每一行都是一个数组,每个字段都是可以点出来的 results[0].password。在用户注册的时候调用bcrypt.hashSync对密码进行加密————存储--在解密的时候同样使用,bcrypt.compareSync(需要验证的内容, 已经hash加密的密码)_返回值是布尔值(true 一致、false 不一致)——可以查看说明文档
登录的路由处理函数
//这是登录的处理函数
const login=function(req,res){//post
userInfo=req.body//接收表单数据
//定义查询用户的SQL语句
const sqlStr='select * from ev_users where username= ?'
db.query(sqlStr,userInfo.username,(err,results)=>{
//执行SQL语句失败_
if(err) return res.cc(err)
//判断查询失败--result里面存的是数组
if(results.length!==1) return res.cc('用户名不存在,请重新登录')
//密码的验证——直接使用等号是不行的,
//我们在用户注册的时候调用bcrypt.hashSync对密码进行加密————存储
//results[0]查出来的第一项
const compareResults= bcrypt.compareSync(userInfo.password, results[0].password)
if(!compareResults) return res.cc('密码错误,请重新登录!')
res.cc('登录OK')//响应给客户端的话
})
}
已经存在这个账户
成功进行密码验证
密码验证出错