当前位置: 首页 > 后端技术 > Node.js

Node.js用户注册、登录、验证流程

时间:2023-04-03 11:19:54 Node.js

1.前言通过本文,您可以掌握node.js用户注册、登录、验证的相关知识。本文中的代码块都在文件索引中。js。二、相关技术点主要工具vscodepostmanmysqlnode相关包expressbody-parserbcryptjsjwt三、文件准备创建文件夹打开vscode控制台,cd进入目录,输入命令npminit-y创建package.json文件安装相关包expressmysqlbody-parserjsonwebtokenbcryptjs为一些简单的配置创建一个索引.js文件//导入mysql以连接到数据库constmysql=require("mysql");//数据库配置//我使用sqlyog可视化工具创建数据库并创建对应的表userconstcon=mysql.createConnection({host:"localhost",user:"root",password:"123456",port:3306,database:"blog",});//定义一个函数来执行sql语句并返回一个promise对象constexec=(sql)=>{constpromise=newPromise((resolve,reject)=>{con.query(sql,(err,result)=>{resolve(result);});});回报承诺;};//连接数据库con.connect();//引入其他相关包constexpress=require("express");varbodyParser=require("body-parser");varbcrypt=require("bcryptjs");constjwt=require("jsonwebtoken");//解析post请求体app.use(bodyParser.json({limit:"1mb"}));//body-parser解析json格式数据app.use(bodyParser.urlencoded({//这一项必须在bodyParser.json下,forparameterencodingextended:true,}));//这个变量是用来解析token的。key变量更私密,应该放在别处。本文简单使用。//值为constSECRET="asdfjoijisadfjlkj"开发者随意设置;//创建服务器constapp=express();//监听3001端口app.listen(3001,()=>{console.日志("服务器启动");});四、界面不要写用户注册密码明文存储在数据库中。如果数据库被黑了,那将是非常危险的,所以我们通常会把密码加密后保存在数据库中。本文使用bcryptjs加密bcryptjs介绍https://segmentfault.com/a/11...app.post("/register",(req,res)=>{constusername=req.body.username;//密码加密constpassword=bcrypt.hashSync(req.body.password,10);constsql=`insertintouser(username,password)values('${username}','${password}')`;exec(sql).then((result)=>{return;});res.send("用户注册成功");});用户登录app.post("/login",(req,res)=>{//从请求中获取请求体const{username,password}=req.body;constsql=`select*fromuserwhereusername='${username}'`;exec(sql).then((result)=>{constuser=result[0];//如果没有找到用户if(!user){res.send("Usernamedoesnot存在");return;}//判断返回true或falseconstisPasswordValid=bcrypt.compareSync(password,user.password);if(!isPasswordValid){res.send("密码错误");返回;}//以用户唯一标识id为第一个参数生成token//SECRET为key获取用户idconsttoken=jwt.sign({id:user.id},SECRET);//如果都通过,则返回user和token//返回的token要保存在客户端,后续请求需要在请求头中设置res.send({user,token});});});用户登录后才能访问的接口app.get("/profile",(req,res)=>{//从请求头中取出tokenconsttoken=req.headers.authorization.split("")[1];//token验证获取用户idconst{id}=jwt.verify(token,SECRET);//查询用户constsql=`select*fromuserwhereid='${id}'`;exec(sql).then((result)=>{//返回用户信息res.send(result[0]);});});5.汇总用户注册请求,后台加密密码存入数据库表。登录时,先根据username查询数据库,判断是否有该用户,如果没有,则返回该用户不存在。如果用户存在,则将登录时传入的密码与数据库的密码进行比较,返回true或false。如果为false,将返回密码错误。如果为真,则返回用户信息和令牌值。.当访问需要验证token的接口时,获取请求头中的token,根据token查询数据库,获取用户信息是否存在,然后进行下一步操作。