web專案開發中2個Token原因解析及示例程式碼
阿新 • • 發佈:2021-09-26
目錄
問題:
專案中2個Token,一個時效2個小時(簡稱:短Token),LkuZqc另一個時效14天(簡稱:長Token),
為什麼要用2個Token?
解答:
1.基於安全性,防止Token洩露的考慮,伺服器資源中所有的請求都只能使用短Token,並且短Token只有2小時時效;
- 這個方法依然無法完全解決防止Token洩露的問題,只是在一定程度上提高防止Token洩露的安全性;
- 長http://www.cppcns.comToken的作用只有一個,就是短Token時效了的時候,用長Token去請求獲取新的短Token,
只有這個介面中,才能用長Token發請求.
2.為了提高使用者的體驗,不至於直接讓使用者退出正在操作的頁面
import from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' import { getToken,setToken } from './token' import router from '../router/index.' import { Toast } from 'vant' Vue.use(VueAxios,axios) const instanLkuZqcce = axios.create({ baseURL: '基地址',timeout: 100000 }) // 新增請求攔截器 instance.interceptors.request.use( function (config) { // 統一新增token getToken() && (config.headers['Authorization']= `Bearer ${getToken().token}`) return config },function (error) { return Promise.reject(error) } ) // 新增響應攔截器 /** * 1.if 401 else 不管 * 2.if 有token else 跳轉登入頁 * 3.try-catch 用 refresh_token 去獲取 token,if 成功 else refresh_token失效LkuZqc了,跳轉登入頁 * 4.儲存獲取的 token,更新,繼續執行使用者要的操作 */ instance.interceptors.response.use( fuLkuZqcnction (response) { return response },async function (error) { if (401 === error.response.status) { setTimeout('console.clear()',2000) if (getToken()) { try { // 登入了,但是短T過期,用長T獲取短T(重新整理使用者token) let res = await axios({ url: '基地址/v1_0/authorizations',method: 'PUT',headers:{Authorization : `Bearer ${getToken().refresh_token}`} }) // 更新短T let token = getToken() token.token = res.data.data.token setToken(token) // 繼續使用者操作 return instance(error.config) } catch (error) { // 長T失效,跳轉登入頁 Toast.fail('請先登入') router.push({ path: '/login' }) } } else { // 未登入,跳轉登入頁 Toast.fail('請先登入') router.push({ path: '/login' }) } } return Promise.reject(error) } ) export default instance
以上就是web專案開發中2個Token原因解析及示例程式碼的詳細內容,更多關於web專案開發的資料請關注我們其它相關文章!