JWT与会话怎么在Nodejs中使用

  

JWT与会话怎么在Nodejs中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>使用JWT

JWT是JsonWebTokens的简写形式,具体是啥我就不详细写了,可以查看资料。
这里引入两个插件,express-jwt和JsonWebTokens, - - - - - -

<李>

JsonWebTokens:用作生成标记

<李>

express-jwt:用作验证指定http请求的JsonWebTokens的有效性,如果有效就将JsonWebTokens的值设置到点播。用户里面,然后路由到相应的路由器

express-jwt内部引用了jsonwebtoken,对其封装使用。使用JWT形式进行认证与授权的思路如下。

 JWT与会话怎么在Nodejs中使用“> </p> <p> JWT认证流程<br/> </p> <p>在服务端中使用方式如下:</p> <pre类=//安装   npm 小姐:jsonwebtoken ——保存   npm 小姐:express-jwt ——保存//引入   const  jwt=,要求(& # 39;jsonwebtoken& # 39;);   const  expressJwt =,要求(& # 39;express-jwt& # 39;);//定义签名   const  secret =, & # 39;盐# 39;;//生成令牌   const  token =, jwt.sign ({   ,,名字:123   },,秘密,,{   ,,expiresIn: 60,//秒到期时间   });//生成的令牌//eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoxMjMsImlhdCI6MTQ5MTQ3NTQyNCwiZXhwIjoxNDkxNDc1NDg0fQ.hYNC4qFAyhZClmPaLixfN137d41R2CFk1xPlfLK10JU//使用中间件验证牌合法性   app.use (expressJwt  ({   ,,秘密:secret    })。如果({   ,,路径:[& # 39;/登录# 39;,,& # 39;/getUserInfo& # 39;],//除了这些地址,其他的URL都需要验证   }));//拦截器   app.use (function (呃,,要求的事情,,,,下一个),{//当令牌才能验证失败时会抛出如下错误   if 才能;(err.name ===, & # 39; UnauthorizedError& # 39;), {,,   ,,,//这个需要根据自己的业务逻辑来处理(,具体的错误值,请看下面)   ,,,res.status (401) .send (& # 39; invalid 令牌……& # 39;);   ,,}   });//定义一个接口,返回令牌给客户端   app.get (& # 39;/getUserInfo& # 39;,,函数(点播,res), {   res.json({才能   ,,,令牌:令牌   })才能   })

客户端中使用令牌的正确形式应该是把牌放在授权这个标题里,对应的值以<代码>无记名开头然后空一格

授权:Bearer  eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiQmluTWFpbmciLCJkYXRhIjoiPT09PT09PT09PT09PSIsImlhdCI6MTUwMTgxNDE4OCwiZXhwIjoxNTAxODE0MjQ4fQ.GoxGlc6E02W5VvqDNawaOrj3MPO-4UYeFdngKR4bVTE//采用axios可以这么写   const  instance =, axios.create ();   const  yourToken =, & # 39; sfsgagfdgd& # 39;;//设置请求拦截器   instance.interceptors.request.use(函数(配置),{   config.headers.authorization =,才能“Bearer  $ {yourToken}”,   return 才能;配置;   })

<强>使用会话

传统的认证和用户识别分别采用如下形式

<李>

服务端:创建一个会话对象保存用户登录信息和状态,该对象有唯一ID,并返回一个饼干给客户端

<李>

客户端:请求api时发送http头部自动带上饼干

这里使用饼干的方式需要引入两个插件:

<李>

express-session:节点端的会话中间件,主要用作配置会话的属性并生成

<李>

cookie-parser:节点端解析饼干对象

使用思路和智威汤逊差不多,这里主要的区别在于客户端请求资源时不用手动在http请求的头添加标识,浏览器会自动加上饼干,具体使用方式如下

var  express =,要求(& # 39;表达# 39;);   var  cookieParser =,要求(& # 39;cookie-parser& # 39;);   var  session =,要求(& # 39;express-session& # 39;);   ,   app.use (cookieParser (& # 39; sessiontest # 39;));   app.use(会话({   ,,秘密:& # 39;sessiontest # 39;//与cookieParser中的一致   :,,重新保存,真的,,,//(是否允许)当客户端并行发送多个请求时,其中一个请求在另一个请求结束时对会话进行修改覆盖并保存。   滚动才能:,真的,,,//强制在每个响应中重设饼干的过期时间,并重新开始计时   saveUninitialized才能:真的,,,//初始化会话时是否保存到存储。默认为真的,,但是(后续版本)有可能默认失效,所以最好手动添加。   ,,饼干:{   ,,,maxAge:, 60, *, 1000,//过期时间,单位毫秒   ,,}   }));/* *   ,*资源请求拦截器   ,*用户端若登录状态过期或未登录则自动抛出错误   ,*/app.use(功能(要求的事情,,,,下一个),{   let 才能;url =, req.originalUrl;   req.session.touch才能();,//刷过新会话期时间   if 才能;(url  !==, & # 39;/登录# 39;,,,,! req.session.user), {   ,,,res.status (401) .send(& # 39;登录状态已过期& # 39;);   ,才能返回   ,,}   下才能();   })

JWT与会话怎么在Nodejs中使用