国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vue路由之JWT身份認(rèn)證

he_xd / 1268人閱讀

摘要:路由之身份認(rèn)證一身份認(rèn)證簡(jiǎn)介是目前最流行的跨域身份驗(yàn)證解決方案,相較于機(jī)制,服務(wù)器就不需要保存任何數(shù)據(jù)了,也就是說(shuō),服務(wù)器變成無(wú)狀態(tài)了,從而比較容易實(shí)現(xiàn)擴(kuò)展。

Vue路由之JWT身份認(rèn)證 一、JWT身份認(rèn)證簡(jiǎn)介
JSON Web Token(JWT)是目前最流行的跨域身份驗(yàn)證解決方案,相較于session機(jī)制,服務(wù)器就不需要保存任何 session 數(shù)據(jù)了,也就是說(shuō),服務(wù)器變成無(wú)狀態(tài)了,從而比較容易實(shí)現(xiàn)擴(kuò)展。JWT 實(shí)際上是一個(gè)令牌(Token),服務(wù)器會(huì)將一些元數(shù)據(jù)指定的secret進(jìn)行簽名并生成token,并返回給客戶端,客戶端得到這個(gè)服務(wù)器返回的令牌后,需要將其存儲(chǔ)到 Cookie 或 localStorage 中,此后,每次與服務(wù)器通信都要帶上這個(gè)令牌,可以把它放到 Cookie 中自動(dòng)發(fā)送,但這樣做不能跨域,所以更好的做法是將其放到 HTTP 請(qǐng)求頭 Authorization 字段里面。
二、JWT的使用

① 安裝并引入jsonwebtoken模塊;
② 對(duì)元數(shù)據(jù)secret密鑰進(jìn)行簽名,并生成對(duì)應(yīng)的token;
③ 對(duì)token進(jìn)行校驗(yàn)是否過(guò)期

const jwt = require("jsonwebtoken"); // 引入jwt
const secret = "this is a private key"; // 指定一個(gè)用于生成token的密鑰字符串
const token = jwt.sign({ foo: "bar" }, secret, { // 傳入元數(shù)據(jù)和secret密鑰,并指定過(guò)期時(shí)間生成token
    expiresIn: 5, // 多帶帶一個(gè)數(shù)字表示多少秒
    // expiresIn: "10h", // 表示10小時(shí)后過(guò)期
    // expiresIn: "2d" // 表示2天后過(guò)期
});
console.log(`token is ${token}`);
setTimeout(() => { // 5秒后對(duì)該token進(jìn)行校驗(yàn)
    jwt.verify(token, secret, (err, decoded) => {
        console.log(err);
        if (err) {
            console.log("token 已經(jīng)失效了.");
        } else {
            console.log(`token data is ${JSON.stringify(decoded)}`);
        }
    });
}, 5000);
生成的token為一個(gè)很長(zhǎng)的字符串,分為三部分,每部分由.號(hào)隔開(kāi),即 頭部.載荷.簽名,5秒后token校驗(yàn)結(jié)果為error,即token已經(jīng)過(guò)期,校驗(yàn)的時(shí)候,會(huì)得到token的解碼數(shù)據(jù),主要包括生成token時(shí)候的元數(shù)據(jù)token的簽發(fā)時(shí)間(iat)token的過(guò)期時(shí)間(exp)
// 生成的token字符串為
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE1NjY3MzE4MzEsImV4cCI6MTU2NjczMTgzNn0.cZZkExNnVqBtnfQN2vtU2Z7JB0PBo1CFyC5NiOywg54
// token decoded后的數(shù)據(jù)
token data is {"foo":"bar","iat":1566731831,"exp":1566731836}
三、封裝axios
由于在使用jwt認(rèn)證的時(shí)候,客戶端向服務(wù)器發(fā)起請(qǐng)求的時(shí)候,都要帶上token,即要獲取到token并將其放到請(qǐng)求頭的Authorization字段中,服務(wù)器才能從authorization中取出token并進(jìn)行校驗(yàn),所以我們必須通過(guò)攔截器去實(shí)現(xiàn),在每次請(qǐng)求之前將請(qǐng)求進(jìn)行攔截,然后添加上token,再繼續(xù)向服務(wù)器發(fā)起請(qǐng)求。
import axios from "axios";
class Request {
    constructor() {
        this.baseURL = process.env.NODE_ENV === "development" ? "http://localhost:3000" : "/"; // 設(shè)置請(qǐng)求baseURL
        this.timeout = 2000; // 設(shè)置請(qǐng)求超時(shí)時(shí)間
    }
    request(config){// 這里的config是請(qǐng)求的時(shí)候傳遞的參數(shù)配置對(duì)象,比如url、method、data等
        const instance = axios.create({ // 創(chuàng)建axios實(shí)例
            baseURL: this.baseURL,
            timeout: this.timeout,
        });
        // 設(shè)置攔截器
        instance.interceptors.request.use((config) => { // 請(qǐng)求攔截之后就是要使用這個(gè)config, config表示整個(gè)請(qǐng)求對(duì)象
            config.headers.Authorization = localStorage.getItem("token"); // 將token從localStorage中取出并添加到請(qǐng)求頭的Authorization字段上
            return config; // 返回請(qǐng)求對(duì)象,繼續(xù)向服務(wù)器發(fā)起請(qǐng)求
        }, err => Promise.reject(err));
        // 設(shè)置響應(yīng)攔截器
        instance.interceptors.response.use(res => res.data, err => Promise.reject(err));
    
        return instance(config);
    }
}
export default new Request();
四、通過(guò)路由鉤子進(jìn)行登錄校驗(yàn)
我們需要在路由跳轉(zhuǎn)之前,進(jìn)行登錄校驗(yàn),即校驗(yàn)登錄的token是否已經(jīng)過(guò)期,如果token沒(méi)有失效,則可以繼續(xù)訪問(wèn)頁(yè)面;如果token已經(jīng)失效,那么檢查一下所訪問(wèn)的頁(yè)面是否需要登錄才能訪問(wèn),如果是需要登錄后才能訪問(wèn),那么跳轉(zhuǎn)到登錄頁(yè)面;如果是不需要登錄也能訪問(wèn)的頁(yè)面則繼續(xù)訪問(wèn);
const whiteList = ["/"]; // 定義一個(gè)白名單列表
router.beforeEach(async (to, from, next) => {
  if (whiteList.includes(to.path)) { // 如果是訪問(wèn)的白名單中的頁(yè)面
    return next(); // 不需要校驗(yàn),直接返回繼續(xù)訪問(wèn)該頁(yè)面
  }
  const isTokenAvailable = await store.dispatch("validate"); // 校驗(yàn)token是否失效
  if (isTokenAvailable) { // 如果token未失效
    if(to.path === "/login") { // 如果訪問(wèn)的是login頁(yè)面,則回到首頁(yè)
      next("/");
    } else { // 如果訪問(wèn)的不是login頁(yè)面,則繼續(xù)訪問(wèn)當(dāng)前要訪問(wèn)的頁(yè)面
      next();
    }
  } else { // 如果token失效了
    const needLogin = to.matched.some(item => item.meta.needLogin); // 檢測(cè)要訪問(wèn)的頁(yè)面是否需要登錄才能訪問(wèn)
    if(needLogin) { // 如果訪問(wèn)的頁(yè)面是需要登錄的
      next("/login"); // 跳轉(zhuǎn)到登錄頁(yè)面
    } else { // 如果訪問(wèn)的頁(yè)面是不需要登錄的,則直接繼續(xù)訪問(wèn)
      next();
    }
  }
});
上面item.meta.needLogin,這個(gè)needLogin是在router中進(jìn)行自定義配置的,在配置路由的時(shí)候,允許通過(guò)meta屬性配置一些自定義的元數(shù)據(jù),如下所示:
export default new Router({
  routes: [
    {
      path: "/profile",
      name: "profile",
      component: Profile,
      meta: {needLogin: true}
    }
  ]
})
五、總結(jié)
jwt認(rèn)證,主要就是Vue路由鉤子beforeEach()的應(yīng)用,以及請(qǐng)求攔截器的封裝,在每次路由跳轉(zhuǎn)前進(jìn)行token認(rèn)證(校驗(yàn)),檢測(cè)token是否失效,其校驗(yàn)過(guò)程就是向服務(wù)器發(fā)起一個(gè)請(qǐng)求,比如"/validate",由于客戶端請(qǐng)求攔截器的作用,會(huì)在發(fā)起"/validate"請(qǐng)求之前,在請(qǐng)求頭的Authorization字段加上token,服務(wù)器收到token后就能對(duì)token是否有效進(jìn)行校驗(yàn)了,然后返回token校驗(yàn)結(jié)果,客戶端再根據(jù)token的校驗(yàn)結(jié)果進(jìn)行路由的具體跳轉(zhuǎn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106970.html

相關(guān)文章

  • 從0到1搭建element后臺(tái)框架權(quán)限篇

    摘要:項(xiàng)目中按鈕權(quán)限注冊(cè)全局自定義指令來(lái)完成的。如果對(duì)自定義指令不熟的話可以查閱官方文檔。相關(guān)文章鏈接從到搭建后臺(tái)框架打包優(yōu)化從到搭建后臺(tái)框架優(yōu)化篇 前言 首先還是謝謝各位童鞋的大大的贊贊,你們的支持是我前進(jìn)的動(dòng)力!上周寫(xiě)了一篇從0到1搭建element后臺(tái)框架,很多童鞋留言提到權(quán)限問(wèn)題,這一周就給大家補(bǔ)上。GitHub 一、jwt授權(quán)認(rèn)證 現(xiàn)在大多數(shù)項(xiàng)目都是采用jwt授權(quán)認(rèn)證,也就是我們所...

    NervosNetwork 評(píng)論0 收藏0
  • 前后端分離JWT(JSON Web Token)的使用

    摘要:前言由于自己開(kāi)發(fā)的項(xiàng)目中用到了技術(shù),前端采用了框架,后端采用了框架,故作此文幫助使用相同技術(shù)棧的朋友們。具體思路如下把后端生成的存入,然后前端切換路由刷新頁(yè)面的時(shí)候,通過(guò)請(qǐng)求的時(shí)候帶上這個(gè),提交給后端判斷當(dāng)前的是否有效,后端返回結(jié)果。 前言 由于自己開(kāi)發(fā)的項(xiàng)目中用到了 JWT 技術(shù),前端采用了 Vue.js 框架,后端采用了 CodeIgniter 框架,故作此文幫助使用相同技術(shù)棧的朋...

    caohaoyu 評(píng)論0 收藏0
  • songEagle開(kāi)發(fā)系列:Vue + Vuex + Koa 中使用JWT認(rèn)證

    摘要:一前言,是為了在網(wǎng)絡(luò)環(huán)境間傳遞聲明而執(zhí)行的一種基于的開(kāi)放標(biāo)準(zhǔn)。用戶簽發(fā)添加中間件校驗(yàn)判斷是否可用獲取解密,獲取用戶名和認(rèn)證失敗中添加處理此處在開(kāi)發(fā)時(shí)需要過(guò)濾掉登錄接口,否則會(huì)導(dǎo)致驗(yàn)證永遠(yuǎn)失敗。前端處理前端開(kāi)發(fā)使用的是,發(fā)送請(qǐng)求使用的是。 一、前言 JWT(JSON Web Token),是為了在網(wǎng)絡(luò)環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)(RFC 7519)。 JWT不是一個(gè)新...

    suosuopuo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<