vue实现token登录验证的完整实例

 更新时间:2022年04月22日 16:17:55   作者:懒啦  
最近公司新启动了个项目,用的是vue框架在做,下面这篇文章主要给大家介绍了关于vue实现token登录验证的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

token可用于登录验证和权限管理。

大致步骤分为:

  1. 前端登录,post用户名和密码到后端。
  2. 后端验证用户名和密码,若通过,生成一个token返回给前端。
  3. 前端拿到token存储到localStorage管理,登录成功进入首页。
  4. 之后前端每一次权限操作如跳转路由,都需要判断是否存在token,若不存在,跳转至登录页。
  5. 前端之后的每一个对后端的请求都要在请求头上带上token,后端查看请求头是否有token,拿到token检查是否过期,返回对应状态给前端。
  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>

路由守卫 ----- 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
})

// 导航守卫
// 使用 router.beforeEach 注册一个全局前置守卫,判断用户是否登陆
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   创建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实现token登录验证的文章就介绍到这了,更多相关vue token登录验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vite+vue3搭建的工程热更新失效问题及解决

    vite+vue3搭建的工程热更新失效问题及解决

    这篇文章主要介绍了vite+vue3搭建的工程热更新失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue3.0-props、computed、自定义事件方式

    vue3.0-props、computed、自定义事件方式

    这篇文章主要介绍了vue3.0-props、computed、自定义事件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue使用highcharts自定义图例点击事件

    vue使用highcharts自定义图例点击事件

    这篇文章主要为大家详细介绍了vue使用highcharts自定义图例点击事件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 谈谈Vue.js——vue-resource全攻略

    谈谈Vue.js——vue-resource全攻略

    本篇文章主要介绍了谈谈Vue.js——vue-resource全攻略,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Vue进阶之利用transition标签实现页面跳转动画

    Vue进阶之利用transition标签实现页面跳转动画

    这篇文章主要为大家详细介绍了Vue如何利用transition标签实现页面跳转动画,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起一下
    2023-08-08
  • VUE实现吸底按钮

    VUE实现吸底按钮

    这篇文章主要为大家详细介绍了VUE实现吸底按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • VUE3+mqtt封装解决多页面使用需重复连接等问题(附实例)

    VUE3+mqtt封装解决多页面使用需重复连接等问题(附实例)

    最近了解到mqtt这样一个协议,可以在web上达到即时通讯的效果,下面这篇文章主要给大家介绍了关于VUE3+mqtt封装解决多页面使用需重复连接等问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 基于Vue实现可选择不连续的时间范围的日期选择器

    基于Vue实现可选择不连续的时间范围的日期选择器

    这篇文章主要为大家详细介绍了如何基于Vue.js实现一个可选择不连续的时间范围的日期选择器,文中的示例代码简洁易懂,需要的可以参考一下
    2023-06-06
  • 详解用vue2.x版本+adminLTE开源框架搭建后台应用模版

    详解用vue2.x版本+adminLTE开源框架搭建后台应用模版

    这篇文章主要介绍了用vue2.x版本+adminLTE开源框架 搭建后台应用模版,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • vue中axios封装使用的完整教程

    vue中axios封装使用的完整教程

    这篇文章主要给大家介绍了关于vue中axios封装使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论