You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
//请求拦截器axios.interceptors.request.use(function(config){//从localStorage里取出tokenconsttoken=localStorage.getItem('tokenName');//把token塞入Authorization里config.headers.Authorization=`Bearer ${token}`;returnconfig;},function(error){// Do something with request errorreturnPromise.reject(error);});
服务端处理前端发送过来的Token
前端发送请求携带token,后端需要判断以下几点:
token是否正确,不正确则返回错误
token是否过期,过期则刷新token 或返回401表示需要从新登录
关于上面两点,需要在后端写一个中间件来完成:
app.use((ctx,next)=>{if(ctx.header&&ctx.header.authorization){constparts=ctx.header.authorization.split(' ');if(parts.length===2){//取出tokenconstscheme=parts[0];consttoken=parts[1];if(/^Bearer$/i.test(scheme)){try{//jwt.verify方法验证token是否有效jwt.verify(token,secret.sign,{complete: true});}catch(error){//token过期 生成新的tokenconstnewToken=getToken(user);//将新token放入Authorization中返回给前端ctx.res.setHeader('Authorization',newToken);}}}}returnnext().catch(err=>{if(err.status===401){ctx.status=401;ctx.body='Protected resource, use Authorization header to get access\n';}else{throwerr;}});});
//响应拦截器axios.interceptors.response.use(function(response){//获取更新的tokenconst{ authorization }=response.headers;//如果token存在则存在localStorageauthorization&&localStorage.setItem('tokenName',authorization);returnresponse;},function(error){if(error.response){const{ status }=error.response;//如果401或405则到登录页if(status==401||status==405){history.push('/login');}}returnPromise.reject(error);});
The text was updated successfully, but these errors were encountered:
JWT
JSON Web Token
(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON
对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。本文只讲
Koa2 + jwt
的使用,不了解JWT
的话请到这里进行了解。koa环境
要使用
koa2+jwt
需要先有个koa
的空环境,搭环境比较麻烦,我直接使用koa起手式,这是我使用koa+typescript
搭建的空环境,如果你也经常用koa
写写小demo
,可以点个star,方便~安装koa-jwt
koa-jwt
主要作用是控制哪些路由需要jwt验证,哪些接口不需要验证:上面代码中,除了登录、注册接口不需要jwt验证,其他请求都需要。
使用jsonwebtoken生成、验证token
执行
npm install jsonwebtoken
安装jsonwebtoken
相关代码:
上面代码中通过
jwt.sign
来生成一个token,参数意义:
在登录中返回token
前端拦截器
前端通过登录拿到返回过来的
token
,可以将它存在localStorage
里,然后再以后的请求中把token
放在请求头的Authorization
里带给服务端。这里以
axios
请求为例,在发送请求时,通过请求拦截器把token
塞到header
里:服务端处理前端发送过来的Token
前端发送请求携带token,后端需要判断以下几点:
关于上面两点,需要在后端写一个中间件来完成:
上面中间件是需要验证token时都需要走这里,可以理解为拦截器,在这个拦截器中处理判断token是否正确及是否过期,并作出相应处理。
后端刷新token 前端需要更新token
后端更换新token后,前端也需要获取新token 这样请求才不会报错。
由于后端更新的token是在响应头里,所以前端需要在响应拦截器中获取新token。
依然以
axios
为例:The text was updated successfully, but these errors were encountered: