javascript - 登錄攔截邏輯問題?
問題描述
現(xiàn)在我輸入賬號密碼,瀏覽器發(fā)送請求,成功返回了token;
想問的是:這個token我是放在cookie里好還是localStorage好呢?
還有就是其他頁面的登錄攔截怎么處理?
是判斷cookie或者localStorage里有token就放行嗎?(如果是,別人隨便造一個token也可以放行了啊)
還有成功的返回的超時時間是怎么用,是放在cookie里面嗎?
還是我的思路是錯的?
問題解答
回答1:用戶認(rèn)證成功后,服務(wù)端返回的 token 值,前端一般存在 localStorage 里。每次發(fā)出請求的時候,把該 token 放在請求頭即可。下面以 axios為例:
// http request 攔截器api.interceptors.request.use(config => { if (window.localStorage.ACCESS_TOKEN) { config.headers.Authorization = ’Bearer ’ + window.localStorage.ACCESS_TOKEN } return config}, error => { return Promise.reject(error)})// http response 攔截器api.interceptors.response.use(response => { if (response.status === 401) { // token過期 window.localStorage.removeItem(’ACCESS_TOKEN’) router.replace({ path: ’/user/login’, query: {redirect: router.currentRoute.fullPath } }) } return response}, error => { return Promise.reject(error)})
頁面的登錄攔截以 vue.js 的 vue-router 為例:
// 導(dǎo)航鉤子router.beforeEach((to, from, next) => { // 檢查登錄狀態(tài) store.commit(types.CHECKOUT_LOGIN_STATUS) if (to.matched.some(record => record.meta.requiresAuth)) { // 判斷該路由是否需要登錄權(quán)限 if (window.localStorage.ACCESS_TOKEN) { // 如果本地存在 access_token,則繼續(xù)導(dǎo)航 next() } else { if (name === ’userLogin’) {next() } else {next({ // 登錄成功后,自動跳轉(zhuǎn)到之前的頁面 path: ’/user/login’, query: { redirect: to.fullPath }}) } } } else { next() }})
另外 token 值一般是很難偽造的,因為每次請求都會向后端去驗證該 token 值的有效性。
回答2:建議 通過 服務(wù)端返回的 request 中 使用 setCookie 的方式進(jìn)行 token設(shè)置,并且設(shè)置為 httpOnly,后面的請求中帶上cookie,然后根據(jù) server 的回調(diào)判斷狀態(tài)。
相關(guān)文章:
1. javascript - vue 移動端的input 數(shù)字輸入優(yōu)化2. 為什么我ping不通我的docker容器呢???3. javascript - 有什么兼容性比較好的辦法來判斷瀏覽器窗口的類型?4. 關(guān)于docker下的nginx壓力測試5. HTML5禁止img預(yù)覽該怎么解決?6. 服務(wù)器端 - 采用nginx做web服務(wù)器,C++開發(fā)應(yīng)用程序 出現(xiàn)拒絕連接請求?7. javascript - npm start 運行’webpack-dev-server’報錯 Cannot find module ’webpack’8. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安裝失敗???9. java - 靜態(tài)屬性中的賦值和靜態(tài)代碼塊中的賦值有什么區(qū)別?10. javascript - nidejs環(huán)境設(shè)置操作一直出現(xiàn)這種問題怎么解決?
