1. 程式人生 > >【vue+axios】前端實現登入攔截

【vue+axios】前端實現登入攔截

登入及攔截、登出、token失效的攔截及對應 axios 攔截器的使用(點選檢視原文

登入攔截邏輯

第一步:路由攔截

首先在定義路由的時候就需要多新增一個自定義欄位requireAuth,用於判斷該路由的訪問是否需要登入。如果使用者已經登入,則順利進入路由,
否則就進入登入頁面。

const routes = [
    {
        path: '/',
        name: '/',
        component: Index
    },
    {
        path: '/repository',
        name: 'repository'
, meta: { requireAuth: true, // 新增該欄位,表示進入這個路由是需要登入的 }, component: Repository }, { path: '/login', name: 'login', component: Login } ];

定義完路由後,我們主要是利用vue-router提供的鉤子函式beforeEach()對路由進行判斷。

router.beforeEach((to, from, next) => {
    if
(to.meta.requireAuth) { // 判斷該路由是否需要登入許可權 if (store.state.token) { // 通過vuex state獲取當前的token是否存在 next(); } else { next({ path: '/login', query: {redirect: to.fullPath} // 將跳轉的路由path作為引數,登入成功後跳轉到該路由 }) } } else
{ next(); } })

每個鉤子方法接收三個引數:
* to: Route: 即將要進入的目標 路由物件
* from: Route: 當前導航正要離開的路由
* next: Function: 一定要呼叫該方法來 resolve 這個鉤子。執行效果依賴 next 方法的呼叫引數。
* next(): 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。
* next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了(可能是使用者手動或者瀏覽器後退按鈕),那麼 URL 地址會重置到 from 路由對應的地址。
* next(‘/’) 或者 next({ path: ‘/’ }): 跳轉到一個不同的地址。當前的導航被中斷,然後進行一個新的導航。
*

確保要呼叫 next 方法,否則鉤子就不會被 resolved。

其中,to.meta中是我們自定義的資料,其中就包括我們剛剛定義的requireAuth欄位。通過這個欄位來判斷該路由是否需要登入許可權。需要的話,同時當前應用不存在token,則跳轉到登入頁面,進行登入。登入成功後跳轉到目標路由。

登入攔截到這裡就結束了嗎?並沒有。這種方式只是簡單的前端路由控制,並不能真正阻止使用者訪問需要登入許可權的路由。還有一種情況便是:當前token失效了,但是token依然儲存在本地。這時候你去訪問需要登入許可權的路由時,實際上應該讓使用者重新登入。
這時候就需要結合 http 攔截器 + 後端介面返回的http 狀態碼來判斷。

第二步:攔截器

要想統一處理所有http請求和響應,就得用上 axios 的攔截器。通過配置http response inteceptor,當後端介面返回401 Unauthorized(未授權),讓使用者重新登入。

// http response 攔截器
axios.interceptors.response.use(
  response => {
    if(response.data.errcode==90000){ // 判斷是否存在token,如果存在的話,則每個http header都加上token
      alert(response.data.errdesc);
      window.sessionStorage.removeItem('session');
      router.replace({
        path: '/admin_view',
        query: {redirect: router.currentRoute.fullPath}
      });
      return;
    }
 /*   console.log('=====',response);*/
    return response;
  },
  error => {
    if (error.response) {
      console.log('errorerror=====',error.response);
    }
  });

通過上面這兩步,就可以在前端實現登入攔截了。登出功能也就很簡單,只需要把當前token清除,再跳轉到首頁即可。

相關推薦

vue+axios前端實現登入攔截

登入及攔截、登出、token失效的攔截及對應 axios 攔截器的使用(點選檢視原文) 登入攔截邏輯 第一步:路由攔截 首先在定義路由的時候就需要多新增一個自定義欄位requireAuth,用於判斷該路由的訪問是否需要登入。如果使用者已經登入,則順

VueCookie實現登入記住密碼功能

登入頁效果圖: 主要思路是利用瀏覽器Cookie來儲存使用者登入資訊。除了儲存使用者名稱和密碼外,還儲存了一個記住密碼的標誌位,如果勾選了,則為true,反之為false。當用戶登入時,不論使用者有沒有勾選“記住密碼”,都會先將資訊存入Cookie,區別在於,如果沒勾選

HAVENT原創前端跨域一站式登錄實現 ( iframe + window.name )

不同的 rip 控制臺 tool 數據信息 als 前端 reat proxy 從網上搜集了一些資料,window.name 傳輸技術,關於window.name的這樣一個特性:name 值在不同的頁面(甚至不同域名)加載後依舊存在,並且可以支持非常長的 name 值(2M

Android 利用廣播實現黑名單指定號碼的簡訊的攔截 附原始碼下載連結

Android 利用廣播實現指定號碼的簡訊的攔截 根據最近的學習內容,今天實現了利用廣播進行指定號碼的攔截 步驟: ①、寫一個數據庫的幫助類,實現對資料庫的建立,總共建立兩個資料庫psms(受保護的簡訊的資料庫)和protectedPhone(受保護的聯絡人資料庫),粘程式碼:

DjangoPython 實現登入驗證碼

1 安裝 pillow 包,用於生成驗證碼圖片 程式碼檔案 verification.py #!/usr/bin/python # -*- coding: utf-8 -*- import random from PIL import Image, ImageDraw, Image

功能點前端vue傳過來的是base64格式(解碼變成二進位制)的圖片怎麼做多圖上傳

                此是tp5框架,控制器中的程式碼 總體思路: 1、先接收資料,遍歷到是字串為止 2、處

vue+axios+element-ui 實現ajax請求攔截和路由攔截

原文連結 https://www.cnblogs.com/parkboyoung/p/6761863.html ajax攔截器: 結合element-ui中loading和message元件來處理的,我們可以單獨建立一個http的js檔案處理axios,再到main.js中引入,統一處理

vue.jsvue.js的transition元件結合css3的transitions屬性輕鬆實現過渡效果的小小小demo

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title>

JavaWeb開發初步實現網站應用釘釘掃碼登入

寫在前面:如果你還不知道釘釘是什麼,就趕緊問問Google。當然,這篇部落格是用流水線的形式完成釘釘掃碼登入。 第一步,看官方文件 如果你想要通過使用者掃碼獲取到他的個人資訊,那麼你需要完成全部的互動,如果你只是想為你的網站做一個免登入處理,其實

Vue.js學習(五):vue+axios+php+mysql 實現前端介面資料動態更新

網上參考了很多例子,都沒有關於vue+php實現前後端的例子,後來自己總結了一個,希望大家批評指正。 vue實現動態資料的方式主要有vue-resource和axios,但是從Vue2.0開始,已經不

Vue 實現登入攔截(二)

本章講解的邏輯部分的 有上一節的login.vue的元件可知。這裡我們就要涉及表單的驗證,為此寫了個方法來驗證表單的正確性 1.編寫validation.js的檔案 /* validation 1.x */ var validation = {

vue.js藉助vue-router實現切換檢視(元件)的demo

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" c

vue.js入門

emp 寫到 logs 組件 images href one mooc 渲染 慕課網視頻學習筆記:http://www.imooc.com/learn/694 1.將html、js、css寫到一個後綴名.vue的文件中,區分這三種類型是通過<template>、

nodeJS爬蟲前端爬蟲系列

取數 能夠 bsp blank 介紹 數據 ports exports 時間段 寫這篇 blog 其實一開始我是拒絕的,因為爬蟲爬的就是cnblog博客園。搞不好編輯看到了就把我的賬號給封了:)。 言歸正傳,前端同學可能向來對爬蟲不是很感冒,覺得爬蟲需要用偏後端的語言,

js 實踐js 實現木桶布局

cto enter 最後一行 scrip fine inner get code 兩個 還有兩個月左右就要準備實習了,所以特意練一練,今天終於搞定了js 的木桶布局了 這一個是按照一個插件的規格去寫的以防以後工作需要,詳細的解釋在前端網這裏 http://www.qdfun

ASP.NETUCenter實現多站點同步註冊

res login oct bst center 實現 log conf https 問題描述 上一篇文章寫了【ASP.Net】UCenter實現多站點同步登錄退出 在整合論壇的時候,同步註冊也是相當必要的一個功能:將論壇註冊的用戶同步到自己的網站,自己網站註冊

bird-front前端框架介紹

lan 查看 後臺管理 gpo mas button 圖片 blank div bird前端項目,基於react、antd、antd-admin,封裝常用數據組件,細粒度權限解決方案。 bird-front是基於react的後臺管理系統前端項目,框架構建部分嚴重借鑒於ant

編譯原理c++實現自下而上語法分析器

不可 acm times style size PC -i 表達式 鏈接 寫在前面:本博客為本人原創,嚴禁任何形式的轉載!本博客只允許放在博客園(.cnblogs.com),如果您在其他網站看到這篇博文,請通過下面這個唯一的合法鏈接轉到原文! 本博客全網唯一合法URL:ht

TensorFlow實戰TensorFlow實現經典卷積神經網絡之VGGNet

3*3 一次 卷積神經網絡 有意 研究 而不是 不同等級 帶來 這一 VGGNet   VGGNet是牛津大學計算機視覺組與Google DeepMind公司的研究員一起研發的深度卷積神經網絡。VGGNet探索了卷積神經網絡的深度與其性能之間的關系,通過反復堆疊3*3的小型

TensorFlow實戰TensorFlow實現經典卷積神經網絡之ResNet

man bject dep lte 也會 weight params detail 三層 ResNet   ResNet(Residual Neural Network)通過使用Residual Unit成功訓練152層深的神經網絡,在ILSVRC 2015比賽中獲得冠軍