web項目開發中2個Token原因解析及示例代碼

在這裡插入圖片描述

問題:

項目中2個Token, 一個時效2個小時(簡稱:短Token), 另一個時效14天(簡稱:長Token),
為什麼要用2個Token?

解答:

1.基於安全性, 防止Token泄露的考慮, 服務器資源中所有的請求都隻能使用短Token, 並且短Token隻有2小時時效;

  •  這個方法依然無法完全解決防止Token泄露的問題, 隻是在一定程度上提高防止Token泄露的安全性;
  • 長Token的作用隻有一個, 就是短Token時效瞭的時候, 用長Token去請求獲取新的短Token,

隻有這個接口中, 才能用長Token發請求.

2.為瞭提高用戶的體驗, 不至於直接讓用戶退出正在操作的頁面

import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import { getToken, setToken } from './token'
import router from '../router/index.js'
import { Toast } from 'vant'
Vue.use(VueAxios, axios)
const instance = 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失效瞭,跳轉登錄頁
 * 4.保存獲取的 token, 更新, 繼續執行用戶要的操作
 */
instance.interceptors.response.use(
  function (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項目開發的資料請關註WalkonNet其它相關文章!

推薦閱讀: