1. 程式人生 > 程式設計 >web專案開發中2個Token原因解析及示例程式碼

web專案開發中2個Token原因解析及示例程式碼

目錄

    在這裡插入圖片描述

    問題:

    專案中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專案開發的資料請關注我們其它相關文章!