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)
})

猜你喜欢

转载自blog.csdn.net/qq_48164590/article/details/130403714
今日推荐