表达框架中使用jwt实现验证的方法

  

  

接着上遍文章(使用会话保存用户数据)来让使用jwt保存用户数据。
  

  

这里会用到passport-jwt/jsonwebtoken。
  

  

passport-jwt是护照的一个验证策略。它使用智威汤逊(json web标记)验证。
  

  

jsonwebtoken是一个编码,解码,验证jwt的模块。

  


  

  

           会话   json web标记                  保存在服务器   保存在的客户               

  

因会话保存在服务器,所以服务器压力比较大。听说并发量达到1 k时就能看到效果。
  

  

因jwt保存在的客户,所以需要加密。

  


  

  

1。安装依赖。
  

        npm我passport-jwt jsonwebtoken      

2。创建一个配置文件,引用配置是使用。
  

     //,/config.js   模块。出口={   secretKey:“12345-67890-9876-54321”,   mongoUrl:“mongodb://localhost: 27017/困惑   }      

3。使用数据库链接配置
  

        var配置=要求(。/配置)   …   const url=config.mongoUrl   const概念网络=猫鼬。连接(url, {useNewUrlParse:真的,useCreateIndex:真})      

4。创建验证文件
  

        。/authenticate.js   var=需要护照(护照),   LocalStrategy=需要.Strategy (“passport-local”),   用户=要求(“。/模型/用户”)      var JwtStrategy=需要.Strategy (“passport-jwt”),   ExtractJwt=需要.ExtractJwt (“passport-jwt”),   jwt=要求(“jsonwebtoken”)      var配置=要求(“。/config.js”)      护照。使用(新LocalStrategy (User.authenticate ()))   passport.serializeUser (User.serializeUser ())   passport.deserializeUser (User.deserializeUser ())      出口。getToken=function(用户){   jwt返回。号(用户、配置。secretKey, {expiresIn: 3600})//签发牌时设置超时时间是3600年代   }      var选择={}   选择。jwtFromRequest=ExtractJwt.fromAuthHeaderAsBearerToken()//从验证头中提取,模型默认不记名的“是”。   选择。secretOrKey=config.secretKey      出口。jwtPassport=护照。使用(新JwtStrategy(选择(jwt_payload)=比;{   控制台。日志(JWT载荷:,jwt_payload)   用户。findOne ({_id: jwt_payload。_id},(呃,用户)=比;{   如果(err) {   返回了(呃,假)   其他}{   如果(用户){   返回(null,用户完成)   其他}{   返回完成(null,假)   }   }   })   }))      出口。verifyUser=护照。验证(jwt,{会话:假})//使用jwt就不再需要会话保存用户数据了。      

5。用户申请登录时把jwt给前端
  

     //线路/users.js   …   var=需要进行身份验证(“. ./authticate”)   路由器。邮报》('/登录',passport.authenticate(当地的),(点播,res)=比;{//登录时还是使用passport-local   var牌=进行身份验证。getToken ({_id: req.user._id})//得到签发后的jwt   res.statusCode=200   res.setHeader(“内容类型”、“application/json”)   res.json({成功:真的,令牌:令牌,状态:“你成功登录!”})   })      

6。前端保存牌
  

     //使用localStorage   . ajax({美元   类型:“文章”,   数据类型:json,   url:“用户/登录”,   数据:{   用户名:“联合国”,   密码:“pw”   },   成功:函数(res) {   localStorage。令牌=getToken (res)   },   错误:函数(err) {…}   })//还可以使用vux方法。//还可以使用封装axios方法。      

7。用户登录超时
  jsonwebtoken验证jwt后,若结果不通过,会有3种错误类型。分别是
  

  

TokenExpiredError//当牌超时时抛出。

        呃={   名称:“TokenExpiredError”,   按摩:“jwt过期”,   过期(ExpDate):   }   JsonWebTokenError      

jwt错误         呃={   名称:“JsonWebTokenError”,   消息:“jwt畸形”//癹wt畸形”,“jwt签名要求”,“无效的签名”、“jwt观众无效。预期:[选项观众)”、“jwt发行人无效。预期:[期权发行人]”、“jwt id无效。预期:[选项JWT ID]”、“JWT无效。预期:选择话题   }

表达框架中使用jwt实现验证的方法