登錄時對于token的處理

在前后端完全分離的情況下揣钦,Vue項目中實現(xiàn)token驗證大致思路如下:
1漠酿、用戶輸入賬號密碼,前端調(diào)后端的登陸接口宇姚,發(fā)送用戶名和密碼夫凸,
2、后端收到請求魔熏,驗證用戶名和密碼啼止,驗證通過后(即登錄成功),后端返回token給前端滓窍;
3巩那、前端拿到token,將token存儲到localStorage和vuex中噪生,并跳轉(zhuǎn)路由頁面东囚;
4、前端每次跳轉(zhuǎn)路由桨嫁,都要判斷 localStroage 中有無 token ,沒有就跳轉(zhuǎn)到登錄頁面楣导,有則跳轉(zhuǎn)到對應(yīng)路由頁面( 通過router.beforeEach((to, from, next)=>{.....}))
5筒繁、每次調(diào)后端接口巴元,都要在請求頭中加上token;
6血当、后端判斷請求頭中有無token禀忆,有token,就拿到token并驗證token离熏,驗證成功就返回數(shù)據(jù)戴涝,驗證失敗(例如:token過期)就返回編碼401(編碼由前臺和后臺約定好)奸鸯,請求頭中沒有token也返回編碼401可帽;
7、如果前端拿到狀態(tài)碼為401蓄拣,則清除token信息并跳轉(zhuǎn)到登錄頁面努隙,并彈框提示用戶當(dāng)前缺少token或者token已失效,請重新登錄咽斧;

一、調(diào)登錄接口成功张惹,在回調(diào)函數(shù)中將token存儲到localStorage和vuex中
login.vue

<template>
  <div>
    <input type="text" v-model="ruleForm.userName" placeholder="用戶名"/>
    <input type="text" v-model="ruleForm.password" placeholder="密碼"/>
    <button @click="login">登錄</button>
  </div>
</template>
<script>
import { mapMutations } from 'vuex';

export default {
    name: '',
    data() {
        return {
            ruleForm: {
                userName: '',
                password: '',
            },
        };
    },
    methods:{
        // 登錄
        login() {
            if (!this.ruleForm.userName) {
                this.ShowToast('賬號不能為空');
                return;
            }
            if (!this.ruleForm.password) {
                this.ShowToast('密碼不能為空');
                return;
            }
            this.showLoading();
            getUserLogin({
                username: this.ruleForm.userName,
                password:this.ruleForm.password
            }).then((res) => {
                this.HideLoading();
                
                this.$store.commit('set_Authorization', res.data.token);// token
                // 跳轉(zhuǎn)登錄
                this.$router.push({
                    name: 'home'
                });
            }).catch((err) => {
                this.HideLoading();
                this.ShowToast('賬號或密碼錯誤,登錄失敗');
                console.log(err);
            });
        },
    }
}
</script>

store文件夾下的index.js

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
    state: {
        Authorization: localStorage.getItem('Authorization') ? localStorage.getItem('Authorization') : '', //  存儲token
    },
    mutations: {
        // 修改token,并將token存入localStorage
        set_Authorization(state, data) {
            state.Authorization = data; // 在這里data就是token,從登錄頁傳過來的
            localStorage.setItem('Authorization', data);
        },
    },
    actions: {}
});

二拧额、路由導(dǎo)航守衛(wèi)
main.js

import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';

Vue.config.productionTip = false;
document.addEventListener('deviceready', () => {
    const vm = new Vue({
        router,
        store,
        render: h => h(App),
    }).$mount('#app');

    router.beforeEach((to, from, next) => {
        if (to.path === '/') {
            next();
        } else {
            const token = localStorage.getItem('Authorization'); // 獲取token
            // token不存在
            if (token === null || token === '') {
                next('/');
                vm.ShowToast('認(rèn)證信息丟失侥锦,請重新登錄');
            } else {
                next();
            }
        }
    });
}, false);

三德挣、請求頭加token,如果前端拿到狀態(tài)碼為401番挺,就清除token信息并跳轉(zhuǎn)到登錄頁面

 import Axios from 'axios';

 Axios.defaults.baseURL = 'http://67.10.90.150:8092/'; // 基礎(chǔ)url
 Axios.defaults.timeout = 60000;  // 請求超時
 Axios.defaults.withCredentials = true; // 允許跨域攜帶cookie信息
 Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

        // 添加請求攔截器
        Axios.interceptors.request.use(
            (config) => {
                if (localStorage.getItem('Authorization')) {
                    config.headers.Authentication = localStorage.getItem(
                        'Authorization'
                    );
                }
                return config;
            },
            error => Promise.reject(error)
        );
        // 添加響應(yīng)攔截器一
        Axios.interceptors.response.use(({ data }) => data,
            (error) => {
                if (error.response.status === 401 && error.response.data) {
                    this.ShowToast('登錄過期' || error.message);
                     this.$router.push({ name: '/login' });
                     localStorage.removeItem('Authorization');
                }
                return Promise.reject(error);
            });
        });
       // 添加響應(yīng)攔截器二
        Axios.interceptors.response.use(({ data }) => data,
            (error) => {
               if(error && error.response){
                   switch(error.response.status){
                       case 400:
                           error.message = '請求錯誤';
                           break;
                       case 401:
                           error.message = '未授權(quán)玄柏,請登錄';                     
                           localStorage.removeItem('Authorization');
                           this.$router.push({ name: '/login' });
                           break;
                       case 403:
                           error.message = '拒絕訪問';                     
                           break;  
                       case 404:
                           error.message = '`請求地址出錯:${error.response.config.url}`';                     
                           break;
                       case 408:
                           error.message = '請求超時';                     
                           break;
                       case 500:
                           error.message = '服務(wù)器內(nèi)部錯誤';                     
                           break;
                       case 501:
                           error.message = '服務(wù)未實現(xiàn)';                     
                           break;
                       case 502:
                           error.message = '網(wǎng)關(guān)錯誤';                     
                           break;
                       case 503:
                           error.message = '服務(wù)不可用';                     
                           break;
                       case 504:
                           error.message = '網(wǎng)關(guān)超時';                     
                           break;
                       case 505:
                           error.message = 'HTTP版本不受支持';                     
                           break;
                       case ECONNABORTED:
                           error.message = '請求超時';                     
                           break;
                       default:
                           break;
                   }
                }else {
                    error.message = '數(shù)據(jù)請求超時';  
                }
                this.ShowToast(error.message);
                return Promise.reject(error);
            });
        });
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绍坝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椎咧,老刑警劉巖灾挨,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳澄,死亡現(xiàn)場離奇詭異,居然都是意外死亡莫矗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門三娩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妹懒,“玉大人,你說我怎么就攤上這事会前∝腋停” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵临庇,是天一觀的道長昵慌。 經(jīng)常有香客問我,道長侄泽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任悼尾,我火速辦了婚禮闺魏,結(jié)果婚禮上俯画,老公的妹妹穿的比我還像新娘。我一直安慰自己艰垂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布娩怎。 她就那樣靜靜地躺著截亦,像睡著了一般爬泥。 火紅的嫁衣襯著肌膚如雪袍啡。 梳的紋絲不亂的頭發(fā)上却桶,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音畴嘶,去河邊找鬼集晚。 笑死偷拔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莲绰。 我是一名探鬼主播姑丑,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼栅哀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了留拾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沦偎,失蹤者是張志新(化名)和其女友劉穎豪嚎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侈询,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡妄荔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了啦租。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡焊刹,死狀恐怖恳蹲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贺奠,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布儡率,位于F島的核電站儿普,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏眉孩。R本人自食惡果不足惜勒葱,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凛虽。 院中可真熱鬧,春花似錦殃姓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至戳杀,卻和暖如春夭苗,著一層夾襖步出監(jiān)牢的瞬間隔缀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工界赔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淮悼。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓揽思,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羹令。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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