nodejs--开发自己的项目——4——用户登录函数模块-即身份认证

  • 检测表单数据是否合法
  • 根据用户名查询用户的数据(在数据库中)
  • 判断用户输入的密码是否正确(密码和数据库中的密码是否匹配)
  • 生成 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 不一致)——可以查看说明文档

bcrypt - npm

登录的路由处理函数 

//这是登录的处理函数
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')//响应给客户端的话 
         
   
       })

}

已经存在这个账户

 

 成功进行密码验证

 密码验证出错

生成 JWT 的 Token 字符串(服务器端生成,响应给客户端)——可以通过Token实现客户端的身份认证——在下篇文章中写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值