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

express+jwt+postMan验证实现持久登录

时间:2023-04-03 12:44:29 Node.js

原理第一次登录时,会返回一个加密的token,下次访问接口时会解密token(登录时返回token)。如果正在解密,说明已经登录,然后延长过期时间下载npminit-y//一键初始化npminstallexpress-s//下载expressnpminstallcors//跨域中间件npminstallbody-parser//body-parser中间件解析带有请求体的数据(post,put)npminstalljsonwebtoken//持久化登录jwtjsonwebtoken基础配置//importexpressletexpress=require('express')letcors=require('cors')letbodyParser=require('body-parser')letjwt=require("jsonwebtoken")//获取服务器letapp=express()app.use(cors())app.use(bodyParser.json())app.use(bodyParser.urlencoded({extended:false}))//listen后面是端口app.listen(8000,function(){console.log('OK')})模拟一个登录界面app.post('/login',function(req,res){let{username}=req.bodyconsole.log(username)res.json({//加密方式//sing参数一:加密对象参数二:加密rules参数3:对象token:jwt.sign({username:username},'abcd',{//过期时间expiresIn:"1h"}),username,code:200})})postMan模拟发送POST请求和收到号码根据token登录持久化验证,将token写入header//登录持久化验证接口。访问该接口时,必须访问token(每次切换前端页面,访问该接口,询问我是否登录/登录过期)//先访问登录界面,获取token,然后访问这个看是否成功app.post('/validate',function(req,res){//访问tokenlettoken=req.headers.authorization;//console.log(token)//验证token的合法性并对token进行解码,解码方式与加密方式相同jwt.verify(token,'abcd',function(err,decode){if(err){res.json({msg:'当前用户未登录'})}else{//证明用户已经登录res.json({username:decode.username,msg:'loggedin'})token:jwt.sign({username:decode.username},'abcd',{//过期时间expiresIn:"1h"})}})})已有登录账号,持久化登录成功。设置登录过期时间token:jwt.sign({username:decode.username},'abcd',{//如果过期时间为1秒expiresIn:"1s"})获取token并设置header信息进行验证过期时间生效