亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

koa+jwt實現token驗證與刷新功能

2024-05-06 16:51:39
字體:
來源:轉載
供稿:網友

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驗證,哪些接口不需要驗證:

import * as koaJwt from 'koa-jwt';//路由權限控制 除了path里的路徑不需要驗證token 其他都要app.use(  koaJwt({    secret: secret.sign  }).unless({    path: [/^//login/, /^//register/]  }));

上面代碼中,除了登錄、注冊接口不需要jwt驗證,其他請求都需要。

使用jsonwebtoken生成、驗證token

執行npm install jsonwebtoken安裝jsonwebtoken

相關代碼:

 

import * as jwt from 'jsonwebtoken';const secret = 'my_app_secret';const payload = {user_name:'Jack', id:3, email: '1234@gmail.com'};const token = jwt.sign(payload, secret, { expiresIn: '1h' });

上面代碼中通過jwt.sign來生成一個token,

參數意義:

  • payload:載體,一般把用戶信息作為載體來生成token
  • secret:秘鑰,可以是字符串也可以是文件
  • expiresIn:過期時間 1h表示一小時

在登錄中返回token

import * as crypto from 'crypto';import * as jwt from 'jsonwebtoken';async login(ctx){ //從數據庫中查找對應用戶 const user = await userRespository.findOne({  where: {   name: user.name  } }); //密碼加密 const psdMd5 = crypto  .createHash('md5')  .update(user.password)  .digest('hex'); //比較密碼的md5值是否一致 若一致則生成token并返回給前端 if (user.password === psdMd5) {  //生成token  token = jwt.sign(user, secret, { expiresIn: '1h' });  //響應到前端  ctx.body = {   token  } }}

前端攔截器

前端通過登錄拿到返回過來的token,可以將它存在localStorage里,然后再以后的請求中把token放在請求頭的Authorization里帶給服務端。

這里以axios請求為例,在發送請求時,通過請求攔截器把token塞到header里:

//請求攔截器axios.interceptors.request.use(function(config) {  //從localStorage里取出token  const token = localStorage.getItem('tokenName');  //把token塞入Authorization里  config.headers.Authorization = `Bearer ${token}`;    return config; }, function(error) {  // Do something with request error  return Promise.reject(error); });

服務端處理前端發送過來的Token
前端發送請求攜帶token,后端需要判斷以下幾點:

token是否正確,不正確則返回錯誤
token是否過期,過期則刷新token 或返回401表示需要從新登錄

關于上面兩點,需要在后端寫一個中間件來完成:

app.use((ctx, next) => { if (ctx.header && ctx.header.authorization) {  const parts = ctx.header.authorization.split(' ');  if (parts.length === 2) {   //取出token   const scheme = parts[0];   const token = parts[1];   if (/^Bearer$/i.test(scheme)) {    try {     //jwt.verify方法驗證token是否有效     jwt.verify(token, secret.sign, {      complete: true     });    } catch (error) {     //token過期 生成新的token     const newToken = getToken(user);     //將新token放入Authorization中返回給前端     ctx.res.setHeader('Authorization', newToken);    }   }  } } return next().catch(err => {  if (err.status === 401) {   ctx.status = 401;   ctx.body =    'Protected resource, use Authorization header to get access/n';  } else {   throw err;  }}); }); 

上面中間件是需要驗證token時都需要走這里,可以理解為攔截器,在這個攔截器中處理判斷token是否正確及是否過期,并作出相應處理。

后端刷新token 前端需要更新token
后端更換新token后,前端也需要獲取新token 這樣請求才不會報錯。

由于后端更新的token是在響應頭里,所以前端需要在響應攔截器中獲取新token。

依然以axios為例:

//響應攔截器axios.interceptors.response.use(function(response) {  //獲取更新的token  const { authorization } = response.headers;  //如果token存在則存在localStorage  authorization && localStorage.setItem('tokenName', authorization);  return response; }, function(error) {  if (error.response) {   const { status } = error.response;   //如果401或405則到登錄頁   if (status == 401 || status == 405) {    history.push('/login');   }  }  return Promise.reject(error); });

總結

以上所述是小編給大家介紹的koa+jwt實現token驗證與刷新功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色影片在线| 不卡av电影在线观看| 日日狠狠久久偷偷四色综合免费| 日韩视频免费观看| 91精品在线一区| 亚洲第一男人av| 欧美在线影院在线视频| 欧美精品免费在线观看| 97人洗澡人人免费公开视频碰碰碰| 国产在线精品播放| 成人久久一区二区三区| 欧美一区二区三区四区在线| 久久99久久99精品中文字幕| 国产精品视频内| 亚洲网站视频福利| 在线观看中文字幕亚洲| 欧美性猛交xxxx乱大交蜜桃| 日本久久中文字幕| 亚洲激情第一页| 日韩中文av在线| 国产精品免费网站| 国产一区二区三区18| 亚洲国产91色在线| 永久免费毛片在线播放不卡| 2024亚洲男人天堂| 深夜福利91大全| 国产a∨精品一区二区三区不卡| 亚洲国产又黄又爽女人高潮的| 97国产真实伦对白精彩视频8| 久久亚洲一区二区三区四区五区高| 久久偷看各类女兵18女厕嘘嘘| 欧美性猛交xxxx乱大交3| 国产日韩在线播放| 亚洲视频第一页| 萌白酱国产一区二区| 国产性猛交xxxx免费看久久| 欧美成人精品一区| 日韩av在线免费播放| 中文日韩在线视频| 91欧美精品午夜性色福利在线| 亚洲风情亚aⅴ在线发布| 国产精品入口日韩视频大尺度| 亚洲福利视频免费观看| 欧美另类老肥妇| 日韩欧美成人区| 欧美猛交ⅹxxx乱大交视频| 亚洲午夜未删减在线观看| 久久久亚洲天堂| 欧美成人一区二区三区电影| 欧美丝袜美女中出在线| 色诱女教师一区二区三区| 欧美一级片在线播放| 国产精品1区2区在线观看| 欧美在线亚洲一区| 久久久人成影片一区二区三区| 欧美激情第6页| 精品国产自在精品国产浪潮| 国产精品视频xxxx| 久久久亚洲精品视频| 亚洲一区二区久久久| 亚洲香蕉av在线一区二区三区| 色偷偷888欧美精品久久久| 日韩在线播放av| 91精品国产91久久久| 自拍偷拍亚洲区| 亚洲第一页自拍| 91精品国产高清自在线看超| 欧美电影免费在线观看| 成人免费福利视频| 插插插亚洲综合网| 欧美午夜视频在线观看| 中文字幕不卡av| 2019中文字幕在线| 狠狠久久亚洲欧美专区| 亚洲一区精品电影| 在线免费观看羞羞视频一区二区| 国产一区二区三区四区福利| 国产视频精品va久久久久久| 亚洲欧美国产日韩天堂区| 亚洲国产精品99| 久久久综合av| 国产精品视频免费在线观看| 2019中文字幕在线观看| 欧美视频二区36p| 成人激情视频在线观看| 亚洲国产欧美自拍| 成人伊人精品色xxxx视频| 538国产精品视频一区二区| 日韩中文字幕网址| 日韩最新中文字幕电影免费看| 丝袜情趣国产精品| 国产精品美女视频网站| 性色av一区二区三区免费| 亚洲精品色婷婷福利天堂| 成人午夜在线影院| 国产精品午夜一区二区欲梦| 另类专区欧美制服同性| 欧美日韩亚洲一区二| 精品久久久久久中文字幕| 成人黄色av播放免费| 欧美丰满少妇xxxx| 这里只有视频精品| 国产精品视频在线观看| 国产一区香蕉久久| 欧美日韩福利在线观看| 亚洲级视频在线观看免费1级| 国产精品久久久久999| 成人精品久久一区二区三区| 久久影视电视剧免费网站清宫辞电视| 久久久精品在线观看| 国产高清在线不卡| 免费99精品国产自在在线| 国产一区二中文字幕在线看| 国产日本欧美一区二区三区| 久久久久久久久久国产| 成人免费自拍视频| 成人av资源在线播放| 精品国偷自产在线视频99| 亚洲精品国产美女| 精品久久中文字幕久久av| 91精品综合久久久久久五月天| 国产一区二区av| www.亚洲一区| 中文字幕日韩精品有码视频| 久久69精品久久久久久国产越南| 在线精品播放av| 九九久久国产精品| 欧美激情精品久久久久久黑人| 亚洲区中文字幕| 国精产品一区一区三区有限在线| 欧美自拍视频在线| 国产精品国产三级国产aⅴ浪潮| 午夜精品一区二区三区在线播放| 国产精品久久久久秋霞鲁丝| 亚洲欧美日韩高清| 久久久久久久色| 7777kkkk成人观看| 国产福利视频一区| 自拍偷拍亚洲区| 国产精品久久久久久久一区探花| 亚洲欧美国产高清va在线播| 57pao国产成人免费| 亚洲精品国产suv| 国产欧美久久久久久| 国产成人亚洲综合91| 97精品免费视频| 成人精品aaaa网站| 欧美午夜精品在线| 美女视频久久黄| 亚洲国产另类 国产精品国产免费| 亚洲精品视频在线观看视频| 国产精品白嫩初高中害羞小美女| 中文字幕久久久| 国产精品免费看久久久香蕉| 日韩激情第一页| 欧美日韩在线视频一区二区| 91免费观看网站| 日韩在线视频观看| 国产精品视频资源| 国内精品在线一区| 久久资源免费视频| 国产精品高潮粉嫩av| 久久久久这里只有精品| 91久久嫩草影院一区二区|