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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
密钥管理服务KMS,1000个密钥,100个凭据,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)
})
目录
相关文章
|
6月前
|
JSON 缓存 JavaScript
❤Nodejs 第十章(用户信息token认证和登录接口开发)
【4月更文挑战第10天】本文介绍了Node.js中实现用户信息token认证和登录接口的步骤。express-jwt的使用,接着创建基本的Express服务器,然后导入并使用jsonwebtoken和express-jwt。设置一个密钥,并定义一个中间件处理token验证。示例展示了登录接口的实现。遇到登录判断失效的问题后,对判断条件进行了优化。
219 2
|
13天前
|
JavaScript
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(二)
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
18 0
|
13天前
|
存储 JSON JavaScript
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单(一)
48 0
|
2月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
40 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
3月前
|
JavaScript 安全 Linux
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD登录并获取AccessToken -- cca.acquireTokenByCode(tokenRequest)
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD登录并获取AccessToken -- cca.acquireTokenByCode(tokenRequest)
|
3月前
|
JavaScript Linux API
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
|
4月前
|
JavaScript 前端开发 API
Node中的AsyncLocalStorage 使用问题之Node.js将 JavaScript 层的 nativeHooks 注册到 C++ 层的问题如何解决
Node中的AsyncLocalStorage 使用问题之Node.js将 JavaScript 层的 nativeHooks 注册到 C++ 层的问题如何解决
|
4月前
|
JavaScript 数据安全/隐私保护
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
157 0
|
6月前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
102 3
|
11月前
【Node】—接收参数 插入数据 实现注册功能
【Node】—接收参数 插入数据 实现注册功能