Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作
在vue中,可以用**Storage(sessionStorage,localStorage)**來存儲(chǔ)token,也可以用vuex來存儲(chǔ)(但要考慮頁(yè)面刷新數(shù)據(jù)消失問題,可以在vuex用Storage),
下面介紹用localStorage來存儲(chǔ):
在登錄請(qǐng)求成功后,會(huì)返回一個(gè)token值,用loaclStorage保存
localStorage.setItem('token',res.data.token)
在main.js中設(shè)置全局請(qǐng)求頭和響應(yīng)回來的判斷
//設(shè)置axios請(qǐng)求頭加入token
Axios.interceptors.request.use(config => {
if (config.push === '/') {
} else {
if (localStorage.getItem('token')) {
//在請(qǐng)求頭加入token,名字要和后端接收請(qǐng)求頭的token名字一樣
config.headers.token=localStorage.getItem('token');
}
}
return config;
},
error => {
return Promise.reject(error);
});
//=============================
//響應(yīng)回來token是否過期
Axios.interceptors.response.use(response => {
console.log('響應(yīng)回來:'+response.data.code)
//和后端token失效返回碼約定403
if (response.data.code == 403) {
// 引用elementui message提示框
ElementUI.Message({
message: '身份已失效',
type: 'err'
});
//清除token
localStorage.removeItem('token ');
//跳轉(zhuǎn)
router.push({name: 'login'});
} else {
return response
}
},
error => {
return Promise.reject(error);
})
在router中的index設(shè)置全局守衛(wèi)來判斷是否存在token,不存在就返回登錄頁(yè)
router.beforeEach((to, from, next) => {
//to到哪兒 from從哪兒離開 next跳轉(zhuǎn) 為空就是放行
if (to.path === '/') {
//如果跳轉(zhuǎn)為登錄,就放行
next();
} else {
//取出localStorage判斷
let token = localStorage.getItem('token ');
if (token == null || token === '') {
console.log('請(qǐng)先登錄')
next({name: 'login'});
} else {
next();
}
}});
補(bǔ)充知識(shí):Vue獲取并存儲(chǔ)服務(wù)器返回的AuthorizationToken信息并給每次請(qǐng)求添加上token
由于后臺(tái)是用jwt的token進(jìn)行身份權(quán)限驗(yàn)證,后臺(tái)在登錄后把token添加響應(yīng)頭里,所以前臺(tái)需要把這個(gè)token存放起來,并給每次請(qǐng)求的請(qǐng)求頭添加上token,服務(wù)器才能獲取token進(jìn)行身份認(rèn)證。
前臺(tái)使用vue項(xiàng)目:
loging.vue(登錄組件)
{
submitForm(formName) {
this.$axios
.post('/api/admin/login', {
userName: this.ruleForm.userName,
password: this.ruleForm.password
})
.then(successResponse => {
this.responseResult = JSON.stringify(successResponse.data)
this.msg = JSON.stringify(successResponse.data.msg)
if (successResponse.data.code === 200) {
this.msg='';
localStorage.setItem('userName',this.ruleForm.userName);
//獲取并存儲(chǔ)服務(wù)器返回的AuthorizationToken信息
var authorization=successResponse.headers['authorization'];
localStorage.setItem('authorization',authorization);
//登錄成功跳轉(zhuǎn)頁(yè)面
this.$router.push('/dashboard');
}
})
.catch(failResponse => {})
}
}
main.js(全局配置js):
//自動(dòng)給同一個(gè)vue項(xiàng)目的所有請(qǐng)求添加請(qǐng)求頭
axios.interceptors.request.use(function (config) {
let token = localStorage.getItem('authorization');
if (token) {
config.headers['Authorization'] = token;
}
return config;
})
這里還需要考慮token過期失效的問題,博主將會(huì)在后續(xù)另寫博客補(bǔ)充。
以上這篇Vue中登錄驗(yàn)證成功后保存token,并每次請(qǐng)求攜帶并驗(yàn)證token操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
element使用自定義icon圖標(biāo)的兩種解決方式
因?yàn)榘惭b原型圖設(shè)計(jì)實(shí)現(xiàn)頁(yè)面,在element自帶的圖標(biāo)庫(kù)好像沒有,所以按鈕的圖標(biāo)icon需要自定義,下面這篇文章主要給大家介紹了關(guān)于element使用自定義icon圖標(biāo)的兩種解決方式,需要的朋友可以參考下2022-07-07
Vue實(shí)現(xiàn)跑馬燈樣式文字橫向滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)跑馬燈樣式文字橫向滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
快速解決 keep-alive 緩存組件中定時(shí)器干擾問題
文章介紹了在使用keep-alive緩存組件時(shí),如何在組件被緩存后清理定時(shí)器以避免干擾其他組件的邏輯,通過在deactivated鉤子中清理定時(shí)器,可以確保組件被緩存時(shí)不會(huì)繼續(xù)運(yùn)行定時(shí)器,感興趣的朋友一起看看吧2025-02-02
Electron主進(jìn)程(Main?Process)與渲染進(jìn)程(Renderer?Process)通信詳解
這篇文章主要介紹了Electron主進(jìn)程(Main?Process)與渲染進(jìn)程(Renderer?Process)通信,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
淺析Vue為什么需要同時(shí)使用Ref和Reactive
這篇文章主要想來和大家一起探討一下Vue為什么需要同時(shí)使用Ref和Reactive,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起了解一下2023-08-08
ElementUI中兩個(gè)Select選擇聯(lián)動(dòng)效果實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于ElementUI中兩個(gè)Select選擇聯(lián)動(dòng)效果實(shí)現(xiàn)的相關(guān)資料,在前端項(xiàng)目開發(fā)中,經(jīng)常會(huì)遇到省市縣三級(jí)聯(lián)動(dòng)的下拉列表框組的問題,需要的朋友可以參考下2023-08-08
vue-cli2 構(gòu)建速度優(yōu)化的實(shí)現(xiàn)方法
這篇文章主要介紹了vue-cli2 構(gòu)建速度優(yōu)化的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01

