vue 登錄模塊開發(fā)總結(jié)

登錄模塊

需要做路由的守衛(wèi),有些模塊是需要被保護的,必須登錄才能訪問。 常見手法是給路由添加?meta:{ auth:true }?來做標(biāo)識抖剿,表示需要做認證。

// 路由守衛(wèi)router.beforeEach((to,from, next) => {

? ? // 判斷要進入的路由是否需要認證? ? if(to.meta.auth) {

? ? ? ? // 通過token令牌機制判斷是否已經(jīng)登錄? ? ? ? const token = localStorage.getItem('token');

? ? ? ? if (token) {

? ? ? ? ? ? next(); // 如果登錄則放行识窿,進入路由? ? ? ? } else {

? ? ? ? ? ? // 跳轉(zhuǎn)斩郎,并攜帶重定向地址? ? ? ? ? ? next({

? ? ? ? ? ? ? path: '/login',

? ? ? ? ? ? ? query: {

? ? ? ? ? ? ? ? ? redirect: to.path

? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? }

? ? } else {

? ? ? ? // 不需要驗證的模塊,直接放行? ? ? ? next();

? ? }

});


在 Vuex 中存儲登錄狀態(tài)?isLogin

importVuefrom'vue'

importVuexfrom'vuex'

importuserfrom'./service/user'Vue.use(Vuex);

exportdefaultnewVuex.Store({state: {isLogin: localStorage.getItem('token') ?true:false},mutations: { setLoginState(state, bool) { state.isLogin = bool;// true 表示登錄喻频,false 表示注銷} },actions: { login({commit}, user) {// 發(fā)起登錄請求缩宜,請求都拆分出去 service 文件夾中// 使用 service 的請求方法user.login(user).then(res=>{// 從 res.data 中解構(gòu)數(shù)據(jù),code和tokenconst{ code, token } = res.data;if(code) {// 登錄成功甥温,修改Vuex中間的登錄狀態(tài)commit('setLoginState',true);// 緩存令牌 tokenlocalStorage.setItem("token", token); }returncode;// 返回code 給下一個 .then 使用}); }, logout({ commit }) {// 清除緩存localStorage.removeItem('token');// 重置狀態(tài)commit('setLoginState',false); } }});

service文件夾下的服務(wù)

// 返回一個 Promises 方便外面使用importaxiosfrom'axios'exportdefault{? ? login(user) {// 注意:請求地址最好是抽出去統(tǒng)一管理returnaxios.get('/api/login', {params: user? ? ? ? });? ? }}

登錄組件中提交事件處理過程

// 提交函數(shù)中, dispatch 是調(diào)用 actios 中的方法锻煌,在通過 commit 發(fā)送 mutations 方法修改數(shù)據(jù)// 注意:this.model 就是傳遞的數(shù)據(jù)this.$store.dispatch("login",this.model)? ? .then(code=>{if(code) {// 登錄成功后,重定向姻蚓,如果沒有則重定向到首頁constpath =this.$route.query.redirect ||'/';this.$router.push(path);? ? ? ? }? ? }).catch(error=>{// 有錯誤發(fā)生 或 登錄失敗consttoast =this.$createToast({time:2000,text: error.message || error.response.data.message ||"登錄失敗",type:"error"});? ? ? ? toast.show();? ? });

需要考慮的檢查點

如何守衛(wèi)路由

如何進行異步操作

如何保存登錄狀態(tài)

如何模擬接口

HTTP 攔截器

新建?interceptor.js?文件宋梧,用于攔截請求和響應(yīng)

// token 過期導(dǎo)致請求失敗的情況可能出現(xiàn)在項目的任何地方,可以通過響應(yīng)攔截統(tǒng)一處理// 攔截器的作用:是對接口做一層保護狰挡,表示所有的接口都會帶有令牌 token? // 可以查看 axios 的文檔 : http://www.axios-js.com/zh-cn/docs/constaxios =require('axios');exportdefaultfunction(vm){// HTTP 請求攔截器axios.interceptors.request.use(config=>{// 在發(fā)送請求之前做些什么// 獲取token, 并添加到 headers 請求頭中consttoken = localStorage.getItem('token');if(token) {? ? ? ? ? ? config.headers.token = token;? ? ? ? }returnconfig;? ? });// HTTP 響應(yīng)攔截器// 統(tǒng)一處理 401 狀態(tài)捂龄,token 過期的處理释涛,清除token跳轉(zhuǎn)login // 參數(shù) 1, 表示成功響應(yīng)axios.interceptors.response.use(null, err => {// 沒有登錄或令牌過期if(err.response.status ===401) {// 注銷跺讯,情況狀態(tài)和tokenvm.$store.dispatch("logout");// 跳轉(zhuǎn)的登錄頁vm.$storer.push('/login');// 注意: 這里的 vm 實例需要外部傳入}returnPromise.reject(err);? ? });}// 使用攔截器// 1. 引入攔截器文件importinterceptorfrom'./interceptor'// 執(zhí)行攔截器初始化interceptor(vm);

注銷

需要清除 token 緩存的兩種情況:

用戶主動注銷

token 過期

需要做的事情:

清空緩存

重置登錄狀態(tài)

methods: {? logout() {this.$route.dispatch('login');? }}

深入理解令牌機制

Bearer Token規(guī)范

概念: 描述在HTTP訪問OAuth2保護資源時如何使用令牌的規(guī)范

特點:令牌就是身份證枢贿,無需證明令牌的所有權(quán)

具體規(guī)定:在請求頭中定義Auuthorization:Bearer token

Json Web Token 規(guī)范?https://jwt.io

概念:令牌的具體定義方式

規(guī)定:令牌由三部分構(gòu)成 頭殉农、載荷刀脏、簽名

頭:包含加密算法、令牌類型等信息

載荷:包含用戶信息超凳、簽發(fā)時間和過期時間等信息

簽名:根據(jù)頭愈污、載荷及秘鑰加密得到的哈希串

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市轮傍,隨后出現(xiàn)的幾起案子暂雹,更是在濱河造成了極大的恐慌,老刑警劉巖创夜,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杭跪,死亡現(xiàn)場離奇詭異,居然都是意外死亡驰吓,警方通過查閱死者的電腦和手機涧尿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來檬贰,“玉大人姑廉,你說我怎么就攤上這事∥痰樱” “怎么了桥言?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長葵礼。 經(jīng)常有香客問我号阿,道長,這世上最難降的妖魔是什么鸳粉? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任扔涧,我火速辦了婚禮,結(jié)果婚禮上赁严,老公的妹妹穿的比我還像新娘扰柠。我一直安慰自己,他們只是感情好疼约,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布卤档。 她就那樣靜靜地躺著,像睡著了一般程剥。 火紅的嫁衣襯著肌膚如雪劝枣。 梳的紋絲不亂的頭發(fā)上汤踏,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音舔腾,去河邊找鬼溪胶。 笑死,一個胖子當(dāng)著我的面吹牛稳诚,可吹牛的內(nèi)容都是我干的哗脖。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼扳还,長吁一口氣:“原來是場噩夢啊……” “哼才避!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氨距,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤桑逝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俏让,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楞遏,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年首昔,在試婚紗的時候發(fā)現(xiàn)自己被綠了寡喝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡沙廉,死狀恐怖拘荡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撬陵,我是刑警寧澤珊皿,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站巨税,受9級特大地震影響蟋定,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜草添,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一驶兜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧远寸,春花似錦抄淑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至灶芝,卻和暖如春郑原,著一層夾襖步出監(jiān)牢的瞬間唉韭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工犯犁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留属愤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓酸役,卻偏偏與公主長得像住诸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子簇捍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容