国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

koa2服務(wù)端使用jwt進行鑒權(quán)及路由權(quán)限分發(fā)的流程分析

2024-05-06 15:36:45
字體:
供稿:網(wǎng)友

大體思路

  后端書寫REST api時,有一些api是非常敏感的,比如獲取用戶個人信息,查看所有用戶列表,修改密碼等。如果不對這些api進行保護,那么別人就可以很容易地獲取并調(diào)用這些 api 進行操作。

  所以對于一些api,在調(diào)用之前,我們在服務(wù)端必須先對操作者進行“身份認證”,這就是所謂的鑒權(quán)。

  Json Web Token 簡稱為 JWT,它定義了一種通信雙方之間以 JSON 對象的形式安全傳遞信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公鑰密鑰對進行簽名,復雜度較高,換來的是更可靠的安全系數(shù)。

  整個認證的流程大體如下:

  首先用戶登錄的接口是不用token認證的,因為這個接口本身就是token的產(chǎn)生來源。前端輸入用戶名和密碼后請求服務(wù)器登錄接口,服務(wù)器驗證用戶名密碼正確后,生成token并返回給前端,前端存儲token,并在后面的請求中把token帶在請求頭中傳給服務(wù)器,服務(wù)器驗證token有效,才可以進行下一步操作。

服務(wù)器生成token

  由于我們的服務(wù)端使用 Koa2 框架進行開發(fā),除了要使用到 jsonwebtoken 庫之外,還要使用一個 koa-jwt 中間件,該中間件針對 Koa 對 jsonwebtoken 進行了封裝,使用起來更加方便。

 const router = require('koa-router')();const jwt = require('jsonwebtoken');const userModel = require('../models/userModel.js');router.post('/login', async (ctx) => { const data = ctx.request.body;const result = await userModel.findOne({  name: data.name,  password: data.password }) if(result !== null){  const token = jwt.sign({   name: result.name,   _id: result._id  }, 'zhangnan', { expiresIn: '2h' });  return ctx.body = {   code: 200,   token: token,   msg: '登錄成功'  } }else{  return ctx.body = {   code: 400,   token: null,   msg: '用戶名或密碼錯誤'  } }});module.exports = router;

  (注意:這里暫時不討論加鹽加密校驗,實際項目中密碼不可能這樣明文驗證,這里只是為了著重討論token鑒權(quán)。在驗證了用戶名密碼正確之后,就可以調(diào)用 jsonwebtoken 的 sign() 方法來生成token,接收三個參數(shù),第一個是載荷,用于編碼后存儲在 token 中的數(shù)據(jù),也是驗證 token 后可以拿到的數(shù)據(jù);第二個是密鑰,自己定義的,隨便寫個什么單詞都可以,但是驗證的時候一定要相同的密鑰才能解碼;第三個是options,可以設(shè)置 token 的過期時間。)

前端獲取token

  接下來就是前端獲取 token,這里是在 vue.js 中使用 axios 進行請求,請求成功之后拿到 token 保存到 localStorage 中。

submit(){ axios.post('/login', {  name: this.username,  password: this.password }).then(res => {  if(res.code === 200){   localStorage.setItem('token', res.data.token);  }else{   this.$message('登錄失敗')  } })}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 五莲县| 永修县| 潞城市| 阳山县| 榆中县| 佛冈县| 烟台市| 广宁县| 清水河县| 汉阴县| 绥宁县| 太白县| 阿鲁科尔沁旗| 芦山县| 仙居县| 英山县| 平舆县| 蒙阴县| 政和县| 安吉县| 准格尔旗| 读书| 绥江县| 漳平市| 岑溪市| 卢龙县| 合水县| 阜南县| 长汀县| 微山县| 白银市| 五莲县| 汉川市| 宁都县| 漳州市| 新民市| 册亨县| 恩施市| 静宁县| 城固县| 桐庐县|