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

NodeJs(Express)简单的用户注册、登录和授权

时间:2023-04-03 16:47:30 Node.js

前言:新建node-auth文件夹,新建server.js文件,初始化文件夹npminit-y(gitinit)1.安装express、mongoose、rest-client2.打开服务器constexpress=require('express)constapp=express()//连接数据库require('./modles/db')//jwtconstjwt=require('jsonwebtoken')app.use(express.json())//keyconstSECRET='sajkFAjscbhsafchdsvjkks';app.get('/api',async(req,res)=>{constuser=awaitUser.find();res.send(user);//res.send('ok');})//registerapp.post('/api/register',async(req,res)=>{constuser=awaitUser.create({username:req.body.username,password:req.body.password})res.send(user);//console.log(req.body);});//loginapp.post('/api/login',async(req,res)=>{constuser=awaitUser.findOne({username:req.body.username});if(!user){returnres.status(422).send({message:'Usernamedoesnotexist'})}//验证密码compareSyncconstisPasswordValid=require('bcryptjs').compareSync(req.body.password,user.password);if(!isPasswordValid){returnres.status(422).send({message:'密码错误'});}//生成令牌consttoken=jwt.sign({id:String(user._id)},SECRET)res.send({user,token})//res.send(isPasswordValid);//res.send(user);});//中间件constauth=async(req,res,next)=>{//获取令牌constraw=String(req.headers.authorization.split('').流行音乐());//解析const{id}=jwt.verify(raw,SECRET);req.user=等待用户。findById(id);next()}//个人信息app.get('/api/profile',auth,async(req,res)=>{res.send(req.user);})app.listen(3000,()=>{`console.log('listeningport3000!');})3.连接数据库/*ps:varbcrypt=require('bcryptjs');生成varsalt=bcrypt.genSaltSync(10);varhash=bcrypt.hashSync("....",salt);//比较bcrypt.compareSync("....",hash);//一步到位varhash=bcrypt.hashSync('...',8);*/constmongoose=require('mongoose')mongoose.connect('mongodb://localhost:27017/database',{newuseNewUrlParser:true,useUnifiedTopology:true,useCreateIndex:true})constuserSchema=newmongoose.Schema({username:{type:String,//uniqueunique:true},password:{type:String,//加密的bcryptset(val){returnrequire('bcryptjs').hashSync(val,10);}}})constUser=mongoose.model('User',userSchema)module.exports={用户}4。新的test.http(类似于postman)@url=http://localhost:3001/api@json=Content-Type:application/json###get{{url}}###Registerpost{{url}}/register{{json}}{"username":"admin4","password":"1234568"}###loginpost{{url}}/login{{json}}{"username":"admin2","password":"1234568"}###个人信息get{{url}}/profileAuthorization:BearereyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVlZGZiYWI1MDc3OTU4MTA0MDkyMjU4ZiIsImlhdCI6MTU5MTc1NDYxNX0.bg2JDwigQ5jYg-nOdNUENjJS80y1KmZySjZDhXpvmTM