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

Express生成token

时间:2023-04-04 00:56:48 Node.js

1。开发环境vue+node2。电脑系统windows10专业版3.在使用vue+node开发的过程中,我们在编写和登录的时候都会用到token验证,下面分享一下express生成的token,并且好用,希望对大家有所帮助。4.安装jsonwebtokennpminstallexpress-jwtnpminstalljsonwebtoken--save4-1。什么是express-jwt和jsonwebtoken?Express-jwt内部引用了jsonwebtoken并将其作为一个包使用。在实际项目中,这两者都需要参考,两者的定位也不一样。jsonwebtoken用于生成token给客户端,express-jwt用于验证token。5.在express项目中,在public文件夹下新建token.js文件,添加如下代码://用于生成和解析tokenvarjwt=require('jsonwebtoken');varsignkey='mes_qdhd_mobile_xhykjyxgs';exports.setToken=function(username,userid){returnnewPromise((resolve,reject)=>{consttoken=jwt.sign({name:username},signkey,{expiresIn:'1h'});resolve(token);})}exports.verToken=function(token){returnnewPromise((resolve,reject)=>{varinfo=jwt.verify(token.split('')[1],signkey);resolve(info);})}6.在app.js中配置:varvertoken=require('./public/token');varexpressJWT=require('express-jwt');app.use(function(req,res,next){vartoken=req.headers['authorization'];if(token==undefined){returnnext();}else{vertoken.verToken(token).then((data)=>{req.data=data;returnnext();}).catch((error)=>{returnnext();})}next(createError(404));});app.use(expressJWT({秘密:'mes_qdhd_mobile_xhykjyxgs',算法:["HS256"]}).unless({path:['/index']//除此地址外,其他网址需要验证}));请注意:使用jwt可能会报错:algorithmsshouldbeset;解决方案:将算法添加到app.use(expressJWT)配置中:["HS256"];报错原因:2020年7月7日jwt更新后,安装的express-jwt模块默认为6.0.0版本,更新后的jwt需要在配置中添加algorithms属性,即设置jwt的算法通常HS256是配置算法的默认值:app.use(function(err,req,res,next){//设置locals,开发时只提供errorif(err.status==401){returnres.status(401).send('tokeninvalid');}res.locals.message=err.message;res.locals.error=req.app.get('env')==='development'?错误:{};//渲染错误页面res.status(err.status||500);//res.render('error');});7.在界面中使用:varexpress=require('express');varrouter=express.Router();varjwt=require('jsonwebtoken');varCtoken=require('../public/token');/*GET用户列表。*/router.get('/',function(req,res,next){varCtok="";Ctoken.setToken("张三").then((data)=>{letCObj={code:"我是登录界面",msg:"请求成功",CHtoken:data}res.json(CObj);});})module.exports=router;8、效果图如下:8-1.这里有一个可以解析token的网站:https://jwt.io/8-2。效果如下:9、本期的分享到此结束,希望对大家有所帮助,让我们一起努力,勇攀高峰。