最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue登錄以及權(quán)限驗(yàn)證相關(guān)的實(shí)現(xiàn)

 更新時(shí)間:2019年10月25日 09:52:16   作者:zhuzhezhe  
這篇文章主要介紹了vue登錄以及權(quán)限驗(yàn)證相關(guān)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
關(guān)鍵詞:前后端分離、jwt、登錄、權(quán)限驗(yàn)證

最近在做一個(gè)小應(yīng)用,需要用到vue實(shí)現(xiàn)登錄,以及給不同路由設(shè)置權(quán)限。在網(wǎng)上看了很多文章,講的是亂七八糟。感嘆國(guó)內(nèi)技術(shù)類(lèi)文章實(shí)在是差勁,抄來(lái)抄去。這篇文章就說(shuō)說(shuō)我最后是如何實(shí)現(xiàn)的。

前后端分離項(xiàng)目中,后端提供api接口給前端,使用jwt發(fā)放權(quán)限。

首先前端提供用戶(hù)名和密碼請(qǐng)求登錄接口,后端驗(yàn)證之后返回給前端一個(gè)token,之后前端在請(qǐng)求需要權(quán)限的接口時(shí)攜帶這個(gè)token就可以了。

兩個(gè)問(wèn)題

現(xiàn)在面臨兩個(gè)問(wèn)題,

首先vue中不同的路由有不同的權(quán)限,比如我要訪(fǎng)問(wèn)后臺(tái) /admin, 就需要先登錄才行,而有的頁(yè)面不需要登錄。

第二個(gè)問(wèn)題是,vue組件中使用axios請(qǐng)求后臺(tái)服務(wù)時(shí),不同的接口有不同的權(quán)限。

后端接口權(quán)限

先來(lái)解決第二個(gè)問(wèn)題。vue不同組件都要用到axios,我們?cè)谌譃閍xios添加request和response的攔截器。

也就是,在發(fā)起請(qǐng)求之前,先檢測(cè)header是否攜帶token信息。在接收響應(yīng)之前,先查看后端返回狀態(tài)碼,如果說(shuō)需要token驗(yàn)證就跳轉(zhuǎn)到登錄界面。

在main.js添加如下,或者新增一個(gè)http.js文件:

// * http request 攔截器
axios.interceptors.request.use(
  config => {
    // * 判斷是否存在token,如果存在的話(huà),則每個(gè)http header都加上token
    // * token會(huì)在登錄之后存儲(chǔ)在本地
    if (localStorage.token) {
      config.headers["Authorization"] = `Bearer ${localStorage.token}`;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });

// * http response 攔截器
axios.interceptors.response.use(
  response => {
    let data = response.data;
    // * 正常返回?cái)?shù)據(jù)
    if (data.code === 0) {
      // * 返回data
      return data
    }
    // * 如果code是20103 表示token未認(rèn)證(后端定義的錯(cuò)誤碼)
    // * 跳轉(zhuǎn)到login
    if (data.code === 20103) {
      router.replace('/login')
    }
    return Promise.reject(data);
  },
  error => {
    return Promise.reject(error);
  });

Vue.prototype.$http = axios;

現(xiàn)在發(fā)起的任何請(qǐng)求之前都會(huì)檢查是否攜帶token,如果沒(méi)有就跳到login界面。

在login中,攜帶用戶(hù)名和密碼獲取token之后,存放到本地。

login.vue:

axios.post('/api/login', {
          email: this.email,
          password: this.password
        }) .then((res) => {
            // * 存儲(chǔ)token
            localStorage.setItem('token', res.data.token);
            console.info("login successful");
            // * 跳轉(zhuǎn)回登錄前頁(yè)面
            this.$router.push({path: this.$route.query.redirect || '/admin',})

          }).catch((error) => {
          console.error(error)
        });

前端vue路由權(quán)限

現(xiàn)在,訪(fǎng)問(wèn)后端接口的權(quán)限問(wèn)題解決了。但是在vue中我不同的頁(yè)面有不同的訪(fǎng)問(wèn)權(quán)限該如何處理?vue-router官方文檔給出了例子:

在需要權(quán)限的路由添加meta信息,表明該路由需要登錄才能訪(fǎng)問(wèn),然后在所有路由跳轉(zhuǎn)之前添加處理函數(shù),如果沒(méi)有auth,跳轉(zhuǎn)到登錄:

path: '/admin',
name: 'admin',
component: () => import('../views/admin/Admin.vue'),
// * 需要登錄才能訪(fǎng)問(wèn)
meta: {requiresAuth: true},
// * 全局鉤子
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // * 對(duì)于需要auth的路徑
    // * 沒(méi)有token信息,redirect to login
    if (!localStorage.token) {
      next({
        path: '/login',
        query: {redirect: to.fullPath}
      })
    } else {
      next()
    }
  } else {
    next() // 確保一定要調(diào)用 next()
  }
})

登出的話(huà),清除token信息即可。

localStorage.removeItem("token")

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Vant完成DatetimePicker 日期的選擇器操作

    使用Vant完成DatetimePicker 日期的選擇器操作

    這篇文章主要介紹了使用Vant完成DatetimePicker 日期的選擇器操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 詳解Vue底部導(dǎo)航欄組件

    詳解Vue底部導(dǎo)航欄組件

    這篇文章主要介紹了Vue底部導(dǎo)航欄的詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue.js 微信支付前端代碼分享

    vue.js 微信支付前端代碼分享

    下面小編就為大家分享一篇vue.js 微信支付前端代碼。具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 利用vue實(shí)現(xiàn)密碼輸入框/驗(yàn)證碼輸入框

    利用vue實(shí)現(xiàn)密碼輸入框/驗(yàn)證碼輸入框

    這篇文章主要為大家詳細(xì)介紹了如何利用vue實(shí)現(xiàn)密碼輸入框或驗(yàn)證碼輸入框的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2023-08-08
  • vue前端項(xiàng)目打包成Docker鏡像并運(yùn)行的實(shí)現(xiàn)

    vue前端項(xiàng)目打包成Docker鏡像并運(yùn)行的實(shí)現(xiàn)

    這篇文章主要介紹了vue前端項(xiàng)目打包成Docker鏡像并運(yùn)行的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 解決項(xiàng)目vite1.0升級(jí)到2.0打包遇到Some chunks are larger問(wèn)題

    解決項(xiàng)目vite1.0升級(jí)到2.0打包遇到Some chunks are larger問(wèn)題

    本文主要介紹了解決項(xiàng)目vite1.0升級(jí)到2.0打包遇到Some chunks are larger問(wèn)題,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 新手簡(jiǎn)單了解vue

    新手簡(jiǎn)單了解vue

    Vue.js是一個(gè)構(gòu)建數(shù)據(jù)驅(qū)動(dòng)的 web 界面的漸進(jìn)式框架。Vue.js 的目標(biāo)是通過(guò)盡可能簡(jiǎn)單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。下面我們來(lái)簡(jiǎn)單了解下吧
    2019-05-05
  • vue中的dom節(jié)點(diǎn)和window對(duì)象

    vue中的dom節(jié)點(diǎn)和window對(duì)象

    這篇文章主要介紹了vue中的dom節(jié)點(diǎn)和window對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue實(shí)現(xiàn)帶過(guò)渡效果的下拉菜單功能

    vue實(shí)現(xiàn)帶過(guò)渡效果的下拉菜單功能

    這篇文章主要為大家詳細(xì)介紹了vue仿寫(xiě)帶過(guò)渡效果的下拉菜單功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Vue?配置代理詳情

    Vue?配置代理詳情

    這篇文章主要介紹了Vue?配置代理詳情,文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-04-04

最新評(píng)論

子洲县| 抚顺县| 股票| 西宁市| 宁乡县| 呈贡县| 新野县| 贵阳市| 阿坝县| 兴安盟| 深泽县| 灵山县| 庆元县| 玉门市| 临沂市| 咸宁市| 和硕县| 抚州市| 宜良县| 田林县| 石狮市| 阿克苏市| 博白县| 会同县| 沂源县| 喀什市| 莲花县| 柘荣县| 六安市| 龙游县| 平凉市| 雅江县| 蛟河市| 广州市| 怀来县| 天祝| 合江县| 高平市| 朝阳区| 习水县| 朔州市|