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

vue實現(xiàn)token登錄驗證的完整實例

 更新時間:2022年04月22日 16:17:55   作者:懶啦  
最近公司新啟動了個項目,用的是vue框架在做,下面這篇文章主要給大家介紹了關于vue實現(xiàn)token登錄驗證的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

token可用于登錄驗證和權限管理。

大致步驟分為:

  1. 前端登錄,post用戶名和密碼到后端。
  2. 后端驗證用戶名和密碼,若通過,生成一個token返回給前端。
  3. 前端拿到token存儲到localStorage管理,登錄成功進入首頁。
  4. 之后前端每一次權限操作如跳轉路由,都需要判斷是否存在token,若不存在,跳轉至登錄頁。
  5. 前端之后的每一個對后端的請求都要在請求頭上帶上token,后端查看請求頭是否有token,拿到token檢查是否過期,返回對應狀態(tài)給前端。
  6. 若token已過期,清除token信息,跳轉至登錄頁。

登錄頁 -----Login.vue

<template>
  <!-- 登錄 -->
  <div>
    <el-container>
      <el-main>
        <div class="box">
          <el-form
            :model="user"
            :rules="rules"
            ref="user"
            label-width="100px"
            class="demo-ruleForm"
          >
            <el-form-item label="用戶名" prop="email">
              <el-input v-model="user.email"></el-input>
            </el-form-item>
            <el-form-item label="密碼" prop="pass">
              <el-input type="password" v-model="user.password"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="login">登錄</el-button>
            </el-form-item>
          </el-form>
        </div>
      </el-main>
    </el-container>
  </div>
</template>

<script>
import {LoginPostData} from '../../api/index'  // 后端登錄接口
export default {
  data() {
    return {
      rules: {
        email: [
          { required: true, message: "請輸入用戶名", trigger: "blur" },
          { min: 3, max: 20, message: "長度在 3 到 20 個字符", trigger: "blur" },
        ],
        password: [
          { required: true, message: "請輸入密碼", trigger: "blur" },
          { min: 3, max: 5, message: "長度在 3 到 5 個字符", trigger: "blur" },
        ],
      },
      user:{
        email:'',
        password:''
      },
      userToken:'', // 用于存儲從后臺獲取的token
    };
  },
  methods:{
      login(){
      // 登錄接口
      LoginPostData(this.user.email,this.user.password)
      .then((res)=>{ 
      // 將token存到userToken中     
        this.userToken = res.data.data.token
        // 將token本地存儲到回話中
        localStorage.setItem('token', this.userToken);
        // 如果code為200則跳轉到NewReport頁面
        if(res.data.code === 200){
        this.$router.push({name:'NewReport'})
        this.$message({
          message: '恭喜你,登錄成功',
          type: 'success'
        });
        }else{
          this.$message.error(res.data.data);
        }
      })
      .catch(err=>{
        console.log(err);
      })
      }
  },
};
</script>

路由守衛(wèi) ----- router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)
const routes = [
  // 登錄頁
  {
    path: '/',
    name: 'Login',
    component: ()=>import('../views/Login/Login.vue'),
  },
  // 首頁
  {
    path: '/Home',
    name: 'Home',
    component: ()=>import('../views/Home/Home.vue'),
    children:[
      // 新建報表
      {
        path:'/Home/NewReport',
        name:'NewReport',
        component:()=>import('../views/Home/NewReport.vue')
      },
    ]
  },
]

const router = new VueRouter({
  routes
})

// 導航守衛(wèi)
// 使用 router.beforeEach 注冊一個全局前置守衛(wèi),判斷用戶是否登陸
router.beforeEach((to, from, next) => {
//如果去往登錄頁則放行 
  if (to.path === '/') {
    next();
  } else {
    // 從本地存儲里獲取token
    let token = localStorage.getItem('token');
    // 判斷token是否為空如果為空則跳轉到登錄頁 如果有則放行
    if (token === null || token === '') {
      next({path:'/'});
    } else {
      next();
    }
  }
});

export default router

封裝axios 添加請求攔截器 在每次請求之前進行的操作

在請求頭中添加token ---- api/request.js

// 請求
import axios from 'axios'

// create an axios instance   創(chuàng)建axios實例
const instance = axios.create({
	baseURL: 'http://192.168.3.6:8082', // api 的 base_url
	withCredentials: false//跨域時使用憑證,默認帶上cookies
	// timeout: 2000, // request timeout  設置請求超時時間
  })

// 添加請求攔截器,在請求頭中加token
instance.interceptors.request.use(
  config => {
  //判斷token是否存在
    if (localStorage.getItem('token')) {
    // 在請求頭中添加token
      config.headers.token = localStorage.getItem('token');
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  });

export default instance

注意:

鬼知道我當時為了這個找了多半天 哭死

home頁面

<template>
  <div>
    <el-link icon="el-icon-switch-button" @click="tuichu">退出登錄</el-link>
  </div>
</template>

<script>
export default {
    methods: {
    // 退出
    tuichu() {
      //退出登錄,清空token
      localStorage.removeItem('token');
      this.$router.push({ name: "Login" });
    },
  },
};
</script>

總結

到此這篇關于vue實現(xiàn)token登錄驗證的文章就介紹到這了,更多相關vue token登錄驗證內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue+Vux項目實踐完整代碼

    Vue+Vux項目實踐完整代碼

    本文給大家分享一段詳細的代碼給大家介紹Vue+Vux項目實踐思路,需要的朋友可以參考下
    2017-11-11
  • 詳細聊聊Vue中的options選項

    詳細聊聊Vue中的options選項

    options是new Vue的參數(shù),我們一般稱之為選項或者構造選項,下面這篇文章主要給大家介紹了關于Vue中options選項的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • element-ui動態(tài)級聯(lián)選擇器回顯問題詳解(二十多行代碼搞定)

    element-ui動態(tài)級聯(lián)選擇器回顯問題詳解(二十多行代碼搞定)

    大家在使用element-ui的時候肯定會遇到這樣一個問題,就是在你使用級聯(lián)選擇器的回顯問題,下面這篇文章主要給大家介紹了關于element-ui動態(tài)級聯(lián)選擇器回顯問題的相關資料,需要的朋友可以參考下
    2023-03-03
  • vue中watch監(jiān)聽器用法之deep、immediate、flush

    vue中watch監(jiān)聽器用法之deep、immediate、flush

    Vue是可以監(jiān)聽到多層級數(shù)據(jù)改變的,且可以在頁面上做出對應展示,下面這篇文章主要給大家介紹了關于vue中watch監(jiān)聽器用法之deep、immediate、flush的相關資料,需要的朋友可以參考下
    2022-09-09
  • vue3使用videojs播放m3u8格式視頻教程

    vue3使用videojs播放m3u8格式視頻教程

    m3u8是一種基于HTTP Live Streaming(HLS)文件視頻格式,它主要是存放整個視頻的基本信息和分片(Segment)組成,下面這篇文章主要給大家介紹了關于vue3使用videojs播放m3u8格式視頻的相關資料,需要的朋友可以參考下
    2023-06-06
  • 關于Element UI table 順序拖動方式

    關于Element UI table 順序拖動方式

    這篇文章主要介紹了關于Element UI table 順序拖動方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • el-date-picker默認結束為當前時分秒的操作方法

    el-date-picker默認結束為當前時分秒的操作方法

    在element?ui中的日期時間選擇組件中默認是00:00,現(xiàn)在需求是點擊默認結束時間為當前時分秒,查了很多資料寫的都不準確?,今天給大家分享el-date-picker默認結束為當前時分秒的操作方法,感興趣的朋友一起看看吧
    2024-01-01
  • vue如何實現(xiàn)垂直居中

    vue如何實現(xiàn)垂直居中

    這篇文章主要介紹了vue如何實現(xiàn)垂直居中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue的diff算法原理你真的了解嗎

    Vue的diff算法原理你真的了解嗎

    這篇文章主要為大家詳細介紹了Vue的diff算法原理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 使用Vue3實現(xiàn)羊了個羊的算法

    使用Vue3實現(xiàn)羊了個羊的算法

    這篇文章主要介紹了使用Vue3實現(xiàn)羊了個羊的算法,初始化的隨機位置算法,通過實例代碼介紹了計算偏移量的方法,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09

最新評論

万安县| 开封县| 龙口市| 康马县| 奎屯市| 莲花县| 松滋市| 万年县| 景宁| 嘉荫县| 陵川县| 晋城| 庐江县| 平凉市| 三明市| 武川县| 西丰县| 西昌市| 东明县| 东兴市| 苗栗县| 镇赉县| 克山县| 山丹县| 永仁县| 德江县| 台江县| 通州区| 澄城县| 阿拉善左旗| 来安县| 雅安市| 宽甸| 镇沅| 桦川县| 青铜峡市| 昆明市| 嵊州市| 海宁市| 崇礼县| 桃园市|