Vue實現(xiàn)前端登錄控制 - 標準做法

登錄控制是各類管理系統(tǒng)的基礎(chǔ)功能,實現(xiàn)方案也是成熟的妥凳。


登錄

思路

業(yè)界常規(guī)做法如下:

  1. 用戶登錄之后竟贯,服務(wù)器返回用戶的信息(用戶id, 姓名,用戶名)和Token逝钥。前端把這些數(shù)據(jù)寫入到localStorage中屑那。
  2. 當用戶打算進入受保護頁面時,前端程序檢查是拿到token或者用戶id。如果沒有持际,說明用戶沒登錄沃琅,直接跳轉(zhuǎn)到登錄頁面。
  3. 如果檢查通過就正常進入頁面蜘欲,需要從后臺取數(shù)據(jù)的時候益眉,在Request Header中帶上Token, 供服務(wù)端做身份驗證。

對應(yīng)這個思路姥份,程序上做如下修改:第一郭脂、二 兩點修改 vue router 設(shè)置使用路由守衛(wèi)(Route guard)來實現(xiàn) ;第三點修改 axios 配置殿衰,使用axios攔截器來實現(xiàn)朱庆。

實現(xiàn)

  • 在router中用 meta requiresAuth 來區(qū)分需不需要登錄
  {
    path: "/",
    name: "Login",
    component: () =>
      // route level code-splitting
      // this generates a separate chunk (about.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      import(/* webpackChunkName: "login" */ "../views/Login.vue")
  },
  {
    path: "/dashboard",
    name: "Dashboard",
    meta: {
      requiresAuth: true  //需要登錄才能訪問
    },
    component: () =>
      // route level code-splitting
      // this generates a separate chunk (about.[hash].js) for this route
      // which is lazy-loaded when the route is visited.
      import(/* webpackChunkName: "dashboard" */ "../views/Dashboard.vue")
  },
  • 使用路由守衛(wèi)判斷 1. 頁面是否需要登錄,2. 用戶有沒有拿到userId
router.beforeEach((to, from, next) => {
  const loggedIn = localStorage.getItem("userId");
  if (to.matched.some(record => record.meta.requiresAuth) && !loggedIn) {
    next({ name: "Login" });
  }
  next();
});

在Axois發(fā)送請求之前在Request Header中帶上Token, 收到返回之后檢查返回結(jié)果闷祥。如果token過期或者請求上沒帶token了娱颊,服務(wù)端會返回401狀態(tài)碼。前端收到401之后凯砍,主動跳轉(zhuǎn)到登錄頁面箱硕。

//在請求發(fā)出前Header中加上 token
apiClient.interceptors.request.use(config => {
  let token = localStorage.getItem("accessToken");
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

//如果服務(wù)端返回401,則跳轉(zhuǎn)到登錄頁面
apiClient.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response.status == 401) {
      router.push({ name: "Login" });
    } else {
      return Promise.reject(error);
    }
  }
);

總結(jié)

上面的做法有兩點非常標準。

  1. 基于token的認證悟衩,token寫在header中剧罩,header名稱為 Authorization, 值的形式為"Bearer {token}" 這種形式
  2. 沒有權(quán)限的請求座泳,服務(wù)端返回標準HTTP狀態(tài)碼401表示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠昔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挑势,更是在濱河造成了極大的恐慌镇防,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮饱,死亡現(xiàn)場離奇詭異来氧,居然都是意外死亡,警方通過查閱死者的電腦和手機香拉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門啦扬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凫碌,你說我怎么就攤上這事扑毡。” “怎么了证鸥?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵僚楞,是天一觀的道長勤晚。 經(jīng)常有香客問我,道長泉褐,這世上最難降的妖魔是什么赐写? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮膜赃,結(jié)果婚禮上挺邀,老公的妹妹穿的比我還像新娘。我一直安慰自己跳座,他們只是感情好端铛,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疲眷,像睡著了一般禾蚕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狂丝,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天换淆,我揣著相機與錄音,去河邊找鬼几颜。 笑死倍试,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蛋哭。 我是一名探鬼主播县习,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谆趾!你這毒婦竟也來了躁愿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沪蓬,失蹤者是張志新(化名)和其女友劉穎攘已,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怜跑,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年吠勘,在試婚紗的時候發(fā)現(xiàn)自己被綠了性芬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡剧防,死狀恐怖植锉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峭拘,我是刑警寧澤俊庇,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布狮暑,位于F島的核電站,受9級特大地震影響辉饱,放射性物質(zhì)發(fā)生泄漏搬男。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一彭沼、第九天 我趴在偏房一處隱蔽的房頂上張望缔逛。 院中可真熱鬧,春花似錦姓惑、人聲如沸褐奴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敦冬。三九已至,卻和暖如春唯沮,著一層夾襖步出監(jiān)牢的瞬間脖旱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工烂翰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夯缺,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓甘耿,卻偏偏與公主長得像踊兜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子佳恬,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容