node注册和登录你真的清楚了吗?

1.创建数据表
1.1 创建用户表

在这里插入图片描述

2安装并配置mysql文件
2.1安装mysql模块
npm i mysql@2.18.1
2.2 在db index中
const mysql=require('mysql')

//创建数据库连接对象

const db=mysql.createPool({
    host:'localhost',
    user:'root',
    password:'123456',
    database:'my_sql-o1'
})

//向外共享
module.exports=db
3.注册功能

注册的一般流程
1.校验表单数据是否合法
2.检测用户名是否占用
3.密码加密处理
4.插入新用户

3.1检测表单数据合法
 //对客户端的数据进行校验
  if(userInfo.username==''||userInfo.password==''){
   return res.send({
        status:1,
        msg:'用户名和密码不能为空'
    })
  }
3.2判断用户占用
 //查询用户是否重复
  let sql='select * from ev_users where username=?'
  db.query(sql,[userInfo.username],(error,result)=>{
    if(error) {
        return res.send({status:1,msg:error.message})
    }
    console.log(result.length)
    if(result.length>0){
        return res.send({status:1,msg:"用户被占用"})
    }
3.3 密码加密

1.下载bcryptjs

npm i bcryptjs@2.4.3

2.引入bcryptjs


//引入加密包
const bcrypt=require('bcryptjs')

 //密码加密
   userInfo.password=bcrypt.hashSync(userInfo.password,10)
3.4 插入用户
 let sql1='insert into ev_users set ?'
   db.query(sql1,{username:userInfo.username,password:userInfo.password},(error,result)=>{
    if(error) return res.send({
        status:1,
        msg:error.message
    })
    res.send({
        status:0,
        msg:"插入成功"
    })
   })
封装错误处理函数

在app.js

//封装错误处理函数
app.use((req,res,next)=>{
    res.cc=function(err,status=1){
        res.send({
            status,
            message:err instanceof Error ?err.message:err
        })
    }
    next()
})

在代码调用

 return res.cc('用户被占用')

在这里插入图片描述

4.登录功能

登录的一般流程
1.判断前端提交的后端的数据是否合法。
2.查询登录的用户是否存在。
3.判断当前用户的密码是否正确。

4.1 登录密码的判断

bcrypt.compareSync 判断用户输入的密码和数据密码是否正确,其返回类型为布尔值。

//检验密码是否正确
 const compareResult=bcrypt.compareSync(userInfo.password,result[0].password)
4.2 生成token字符

1.下jsonwebtoken

npm i jsonwebtoken@8.5.1

2.导入

//引入token
const jwt=require('jsonwebtoken')

3.配置加密形式
在这里插入图片描述
4.token加密

jwt.sign 有三个参数依次是 生成token的数据,加密的形式,token有效期

//将用户的信息加密,生成token
         const tokenStr=jwt.sign(user,config.jwtscrestKey,{
            expiresIn:'10h'
         })
res.send({
            status:0,
            msg:'登录成功',
            token:'Bearer '+tokenStr
         })
4.3 解析token中间件

1.安装解析中间件

npm i express-jwt@5.3.3

2.在App.js 中引入

//token解析中间件
const expressJWT=require('express-jwt')
//映入解密
const config=require('./config')

app.use(expressJWT({secret:config.jwtscrestKey}).unless({path:['/^\/api/']}))

3.在错误中间件中

//错误中间件
app.use((req,res,err,next)=>{
    if(err.name=='UnauthorizedError') return res.cc('身份认证失败')
     res.cc(err)
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code袁

你的支持是我莫大的幸运

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值