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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文档介绍了创建MySQL数据表、安装配置MySQL模块的过程,并详细阐述了用户注册和登录的功能实现。注册功能包括表单数据校验、用户名占用检测、密码加密及用户插入。登录功能涉及密码判断、生成JWT Token以及使用express-jwt中间件进行Token解析。在整个过程中,还封装了一个错误处理函数用于统一响应错误信息。

@[toc]

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

image.png

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('用户被占用')

image.png

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.配置加密形式
image.png

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)
})
目录
相关文章
|
1月前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
40 3
|
6月前
【Node】—接收参数 插入数据 实现注册功能
【Node】—接收参数 插入数据 实现注册功能
|
9月前
|
存储 小程序 前端开发
uniapp+node.js+mysql前后端微信小程序授权登录
uniapp+node.js+mysql前后端微信小程序授权登录
124 0
|
NoSQL JavaScript 关系型数据库
【Node.js实战】一文带你开发博客项目之登录(对接完毕,cookie、session、redis各司其职)
【Node.js实战】一文带你开发博客项目之登录(对接完毕,cookie、session、redis各司其职)
118 0
|
存储 缓存 NoSQL
【Node.js实战】一文带你开发博客项目之登录(前置知识)
【Node.js实战】一文带你开发博客项目之登录(前置知识)
|
JavaScript 前端开发 数据库连接
Node(十一)mongoose配合Node实现注册登录(注册上传头像,登录成功后显示用户信息)
Node(十一)mongoose配合Node实现注册登录(注册上传头像,登录成功后显示用户信息)
135 1
Node(十一)mongoose配合Node实现注册登录(注册上传头像,登录成功后显示用户信息)
node笔记记录68登录页面简单2
node笔记记录68登录页面简单2
31 0
node笔记记录68登录页面简单2
node笔记记录67登录页面简单1
node笔记记录67登录页面简单1
29 0
node笔记记录67登录页面简单1
|
JavaScript 数据库
Node(十)之Mongoose配合Node路由实现邮箱注册登录(Post版)
Node(十)之Mongoose配合Node路由实现邮箱注册登录(Post版)
115 1
|
JavaScript NoSQL MongoDB
Node(九)之Node配合MongoDB实现简单的注册登录
Node(九)之Node配合MongoDB实现简单的注册登录
83 0