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

首頁 > 語言 > JavaScript > 正文

Vue路由之JWT身份認證的實現方法

2024-05-06 15:35:30
字體:
來源:轉載
供稿:網友

一、JWT身份認證簡介

JSON Web Token(JWT)是目前最流行的跨域身份驗證解決方案,相較于session機制,服務器就不需要保存任何 session 數據了,也就是說,服務器變成無狀態了,從而比較容易實現擴展。JWT 實際上是一個令牌(Token),服務器會將一些元數據、指定的secret進行簽名并生成token,并返回給客戶端,客戶端得到這個服務器返回的令牌后,需要將其存儲到 Cookie 或 localStorage 中,此后,每次與服務器通信都要帶上這個令牌,可以把它放到 Cookie 中自動發送,但這樣做不能跨域,所以更好的做法是將其放到 HTTP 請求頭 Authorization 字段里面。

二、JWT的使用

① 安裝并引入jsonwebtoken模塊;
② 對元數據、secret密鑰進行簽名,并生成對應的token;
③ 對token進行校驗是否過期;

const jwt = require("jsonwebtoken"); // 引入jwtconst secret = "this is a private key"; // 指定一個用于生成token的密鑰字符串const token = jwt.sign({ foo: 'bar' }, secret, { // 傳入元數據和secret密鑰,并指定過期時間生成token  expiresIn: 5, // 單獨一個數字表示多少秒  // expiresIn: "10h", // 表示10小時后過期  // expiresIn: "2d" // 表示2天后過期});console.log(`token is ${token}`);setTimeout(() => { // 5秒后對該token進行校驗  jwt.verify(token, secret, (err, decoded) => {    console.log(err);    if (err) {      console.log('token 已經失效了.');    } else {      console.log(`token data is ${JSON.stringify(decoded)}`);    }  });}, 5000);

生成的token為一個很長的字符串,分為三部分,每部分由.號隔開,即 頭部.載荷.簽名,5秒后token校驗結果為error,即token已經過期,校驗的時候,會得到token的解碼數據,主要包括生成token時候的元數據、token的簽發時間(iat)、token的過期時間(exp)

// 生成的token字符串為eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1NjY3MzE4MzEsImV4cCI6MTU2NjczMTgzNn0.cZZkExNnVqBtnfQN2vtU2Z7JB0PBo1CFyC5NiOywg54
// token decoded后的數據token data is {"foo":"bar","iat":1566731831,"exp":1566731836}

三、封裝axios

由于在使用jwt認證的時候,客戶端向服務器發起請求的時候,都要帶上token,即要獲取到token并將其放到請求頭的Authorization字段中,服務器才能從authorization中取出token并進行校驗,所以我們必須通過攔截器去實現,在每次請求之前將請求進行攔截,然后添加上token,再繼續向服務器發起請求。

import axios from "axios";class Request {  constructor() {    this.baseURL = process.env.NODE_ENV === 'development' ? 'http://localhost:3000' : '/'; // 設置請求baseURL    this.timeout = 2000; // 設置請求超時時間  }  request(config){// 這里的config是請求的時候傳遞的參數配置對象,比如url、method、data等    const instance = axios.create({ // 創建axios實例      baseURL: this.baseURL,      timeout: this.timeout,    });    // 設置攔截器    instance.interceptors.request.use((config) => { // 請求攔截之后就是要使用這個config, config表示整個請求對象      config.headers.Authorization = localStorage.getItem('token'); // 將token從localStorage中取出并添加到請求頭的Authorization字段上      return config; // 返回請求對象,繼續向服務器發起請求    }, err => Promise.reject(err));    // 設置響應攔截器    instance.interceptors.response.use(res => res.data, err => Promise.reject(err));      return instance(config);  }}export default new Request();            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 巴彦淖尔市| 蒙城县| 呈贡县| 青铜峡市| 平昌县| 合水县| 泽普县| 石首市| 永兴县| 县级市| 长子县| 宣武区| 宁强县| 栾川县| 泰顺县| 襄垣县| 连城县| 阿坝| 潮州市| 安义县| 尼玛县| 金平| 化隆| 临西县| 沁阳市| 淮阳县| 遂溪县| 道孚县| 肥乡县| 台前县| 滦南县| 苍溪县| 敦化市| 手机| 象州县| 贡嘎县| 镇康县| 蓬溪县| 古蔺县| 蓬溪县| 柘荣县|