亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

登錄攔截邏輯問題?

登錄攔截邏輯問題?

九州編程 2018-11-14 13:13:28
現在我輸入賬號密碼,瀏覽器發送請求,成功返回了token;想問的是:這個token我是放在cookie里好還是localStorage好呢?還有就是其他頁面的登錄攔截怎么處理?是判斷cookie或者localStorage里有token就放行嗎?(如果是,別人隨便造一個token也可以放行了?。┻€有成功的返回的超時時間是怎么用,是放在cookie里面嗎?還是我的思路是錯的?
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

用戶認證成功后,服務端返回的 token 值,前端一般存在 localStorage 里。
每次發出請求的時候,把該 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 為例:

// 導航鉤子

router.beforeEach((to, from, next) => {

  // 檢查登錄狀態

  store.commit(types.CHECKOUT_LOGIN_STATUS)

  if (to.matched.some(record => record.meta.requiresAuth)) { // 判斷該路由是否需要登錄權限

    if (window.localStorage.ACCESS_TOKEN) { // 如果本地存在 access_token,則繼續導航

      next()

    } else {

      if (name === 'userLogin') {

        next()

      } else {

        next({ // 登錄成功后,自動跳轉到之前的頁面

          path: '/user/login',

          query: {

            redirect: to.fullPath

          }

        })

      }

    }

  } else {

    next()

  }

})

另外 token 值一般是很難偽造的,因為每次請求都會向后端去驗證該 token 值的有效性。

查看完整回答
反對 回復 2018-12-12
  • 1 回答
  • 0 關注
  • 385 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號