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

news2025/1/13 10:05:33

文章目录

          • 1.创建数据表
            • 1.1 创建用户表
          • 2安装并配置mysql文件
            • 2.1安装mysql模块
            • 2.2 在db index中
          • 3.注册功能
            • 3.1检测表单数据合法
            • 3.2判断用户占用
            • 3.3 密码加密
            • 3.4 插入用户
            • 封装错误处理函数
          • 4.登录功能
            • 4.1 登录密码的判断
            • 4.2 生成token字符
            • 4.3 解析token中间件

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AD9208子卡设计资料: 2 路 2.6GSPS/3GSPS AD 采集、2 路 12.6G DA 回放、高性能时钟发生器HMC7044 -FMC 子卡模块

板卡概述 FMC123 是一款基于 FMC 标准规范,实现 2 路 14-bit、3GSPSADC 采集功能、2 路 16-bit 12.6GSPS 回放子卡模块。该模块遵循 VITA57.1 标准,可直接与 FPGA 载卡配合使用,板卡 ADC 器件采用 ADI 公司的 AD9208 芯片,&…

如何在Linkedin领英上找客户

LinkedIn是很多想要获客的朋友,不错的选择,它是一家全球职业社交平台,目前全球会员人数已达6亿之多。在领英,我们可以轻松打造职业形象、获取商业洞察、拓展职业人脉并发现更多职业机遇。 Linkedin主要的作用有以下四点 &#xf…

API 文档管理得这么玩,才会效率加倍

随着互联网的迅速发展,越来越多的企业和开发者开始采用 API 接口作为数据交换和服务调用的标准方式。为了保证API接口的可靠性、稳定性和可维护性,API 文档管理变得愈发重要。 API 文档管理的重要性 API 文档管理是指在开发过程中,对API接口…

Seurat -- ScaleData学习

brief seurat提供了一个教学,其中global scale normalization之后又对数据进行了scale。 默认是对上一步 selected highly variable features进行scale。 概要图以及系列博文可以参见链接。 如果是 SCTransform则不需要手动运行这一步。 下面是就是教程提供的流程…

为什么软件iic需要用开漏输出和上拉电阻

1、疑惑: 不知道大家有没有这种疑惑,在软件iic的配置过程当中,有些时候要输出高低电平,为什么使用开漏输出而不是推挽输出? 2.推挽输出和开漏输出的区别 推挽输出: 输出逻辑0,则N-MOS激活;输…

<C++>类和对象-上

目录 前言 一、类的引入 二、类的定义 1.类的两种定义方式 三、类的访问限定符及封装 1.访问限定符 2.封装 四、类的作用域 五、类的实例化 六、类对象模型 1.计算类对象的大小 2 类对象的存储方式猜测 3. 结构体内存对齐规则 七、this指针 1. 引入 2 this指针的特性 总结 前言…

ChatGPT帮你调用PID算法【结合代码】

目录 PID算法是一种控制算法 下面分别介绍PID算法中的三个参数 MATLAB代码实现PID MATLAB代码实现PID PID算法是一种控制算法 用于控制系统的稳定性和精度。PID算法的名称来源于其三个组成部分:比例(P)、积分(I)和微…

CVE漏洞复现-CVE-2021-22205 GitLab未授权 RCE

CVE-2021-22205 GitLab未授权 RCE 漏洞背景和描述 2021年4月15日,GitLab官方发布安全补丁更新修复了GitLab命令执行漏洞(CVE-2021-22205)。由于GitLab中的ExifTool没有对传入的图像文件的扩展名进行正确处理,攻击者通过上传特制…

不得不说的结构型模式-外观模式

目录 ​编辑 1. 什么是外观模式 1.1外观模式的结构: 2实际案例: 3下面是面试中关于装饰器模式的常见的问题: 3.1下面是问题的答案: 1. 什么是外观模式 Facade模式也叫外观模式, Facade模式为一组具有类似功能的类群&#xff…

3ASC25H214 DATX130以力控制为基础的装配应用方面已经形成了一个解决方案

​ 3ASC25H214 DATX130以力控制为基础的装配应用方面已经形成了一个解决方案 ABB的机器人解决方案最终选择了IRB6400机器人 ABB的解决方案 ABB一直都在不断地研究和开发机器人应用的新技术,有一部分研究活动是与大学进行合作的,其中一项是ABB的科学家和…

数据建模方法论及实施步骤

了解数据建模之前首先要知道的是什么是数据模型。数据模型(Data Model)是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。 一、概要:数据…

关于数据包丢失你需要知道的一切(以及如何避免它)

当数据从一个地方传输到另一个地方时,一些数据包可能会被延迟、损坏甚至丢失。这就是所谓的数据包丢失。这很常见,但这并不意味着你必须接受它! 数据包丢失、延迟、抖动——如果你注意到互联网性能不佳,你可能会遇到其中一种或多种情况。 延迟与速度有关,但什么是数据包…

AP9193 升压恒流驱动芯片 24V 36V1A三线三色 LED大功率方案

AP9193 是一款高效率、高精度的升 压型大功率 LED 灯恒流驱动控制芯片。 应用领域 LED 灯杯 电池供电的 LED 灯串 平板显示 LED 背光 恒流充电器控制 大功率 LED 照明 AP9193 内置高精度误差放大器,固 定关断时间控制电路,恒流驱动电路等, …

【云原生Kubernetes】01-Kubernetes简介

【云原生Kubernetes】01-Kubernetes简介 文章目录 【云原生Kubernetes】01-Kubernetes简介前言kubernets概述为什么要使用Kubernetes?Kubernetes能做什么?Kubenets架构架构图架构组件说明Master节点Node节点Etcd节点 组件间的工作流程 Kubernetes的核心技术Pod副本…

Spring boot 集成Skywalking

一、Skywalking官网 Apache SkyWalking 备注:本文使用的V9.0.0版本 二、SkyWalking服务端安装 1.下载SkyWalking APM 2.解压直接启动bin下的startup.bat 3. 日志查看 见logs/skywalking-oap-server.log 4.监控平台默认地址访问 http://127.0.0.1:8080 如需修…

九款顶级AI工具推荐

ChatGPT OpenAI开发的最强对话系统 地址:chat.openai.com ChatGPT能够在同一个会话期间内回答上下文相关的后续问题。其在短时间内引爆全球的原因在于,在网友们晒出的截图中,ChatGPT不仅能流畅地与用户对话,甚至能写诗、撰文、编…

任务调度框架Azkaban Flow1.0和Azkaban Flow2.0

目录: 一、Azkaban Flow1.0简介二、Azkaban Flow1.0基本任务调度三、Azkaban Flow1.0多任务调度四、Azkaban Flow1.0调度HDFS作业五、Azkaban Flow1.0调度MR作业六、Azkaban Flow1.0调度Hive作业七、Azkaban Flow1.0在线修改作业配置八、Azkaban Flow 2.0 简介九、A…

论文笔记:路网匹配算法综述

17年的老论文了,作为入门是可以的 1 Intro GPS信号和实际的轨迹是有一段距离的 如果对GPS数据不做处理直接定位,那么位置会被定位到非道路的建筑、湖泊、公园中,这显然是不合理的——>需要对GPS数据进行处理,使得其能较为准确…

nodejs搭建web框架开发web服务

首先安装nodejs,然后安装express MVC框架 1. npm install -g express 由于我写的是一个proxy代理服务所以我也安装了 http-proxy-middleware 【npm install -g http-proxy-middleware】 2.如果执行express,未能识别指令主要原因是因为环境变量中没有express.ex…

你真的使用过低代码产品吗?

低代码已经迅速成为现代软件开发的一个重要组成部分。其核心思想是加快和民主化应用程序开发过程。从开发人员的角度来看,这意味着他们可以用最少的编码来构建复杂的应用程序,使开发过程更快、更简单、更高效。对于企业用户来说,它使他们能够…