Element-ui中Token的使用---Vue实现完整的系统登录退出功能_旭哥的博客的博客-程序员宅基地

技术标签: Vue2  webpack  html5  vue  前端  es6  

一、技术提要

  • 涉及element-ui中的validate方法
    在这里插入图片描述

二、具体实现

1、表单部分代码

	<el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
        <!-- 用户名 -->
        <el-form-item prop="username">
          	<el-input v-model="loginForm.username" ></el-input>
        </el-form-item>
        <!-- 密码 -->
        <el-form-item prop="password">
          	<el-input v-model="loginForm.password"  type="password"></el-input>
        </el-form-item>
        <!-- 按钮区域 -->
        <el-form-item class="btns">
          	<el-button type="primary" @click="login">登录</el-button>
          	<el-button type="info" @click="resetLoginForm">重置</el-button>
        </el-form-item>
	</el-form>

2、JavaScript代码

说明:

  • script内使用this.$refs.loginFormRef获取到表单引用对象(注意:表单中el-form组件需要有ref=“loginFormRef”)
  • window.sessionStorage.setItem(‘token’, res.data.token)可将token存储到客户端的 sessionStorage 中, res.data.token为存储的值。
<script>
export default {
  data() {
    return {
      // 登录表单的数据绑定对象loginForm
      loginForm: {
        username: 'root',
        password: '123456'
      },
      // loginFormRules为element-ui表单验证规则
      loginFormRules: {
        // 验证用户名是否合法
        username: [
          { required: true, message: '请输入登录名称', trigger: 'blur' },
          { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
        ],
        // 验证密码是否合法
        password: [
          { required: true, message: '请输入登录密码', trigger: 'blur' },
          { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    // 表单重置方法
    resetLoginForm() {
      //重置表单
      this.$refs.loginFormRef.resetFields()
    },
    
    //验证登陆信息并存储Token至本地---------核心代码开始
    login() {
      //this.$refs.loginFormRef绑定表单对象并使用validate方法
      this.$refs.loginFormRef.validate(async valid => {
        
        //valid判断表单验证是否通过,未通过则直接返回不向服务器请求数据
        if (!valid) return
        
        //此处涉及ES6解构赋值,也可使用res直接接收await返回数据再对数据进行处理
        const { data: res } = await this.$http.post('login', this.loginForm)
        
        //判断状态码若状态码不存在弹出提示失败信息,状态码为200则提示登陆成功
        if (res.meta.status !== 200) return this.$message.error('登录失败!')
        this.$message.success('登录成功')
        
        // 登录成功之后将token保存到客户端的 sessionStorage 中,项目中除了登录之外的其他API接口,必须在登录之后才能访问
        window.sessionStorage.setItem('token', res.data.token)
        
        // 登录成功后使用vue Router的编程式路由将页面跳转到首页
        this.$router.push('/home')
      })
    }
  }
}
</script>

3、使用VueRouter限制页面访问

  • 使用路由守卫阻止未登录用户访问登陆页面以外的页面
router.beforeEach((to, from, next) => {
	  //如果前往登陆页面放行
	  if (to.path === '/login') return next()
	  
	  //读取客户端sessionStorage 中存储的Token
	  const tokenStr = window.sessionStorage.getItem('token')
	  
	  //判断Token是否存在,存在则放行,不存在则需进行登录
	  if (!tokenStr) return next('/login')
	  next()
})

4、使用axios拦截器功能—书写在入口文件main.js中

  • 使用axios拦截器设置每次请求所携带的请求头(除登录之外的其他API接口,必须在携带与后端约定的请求头)
  • 需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌(此处与后端开发人员进行约定)
axios.interceptors.request.use(config => {
   //此处读取上文存储的token并设置请求头
  config.headers.Authorization = window.sessionStorage.getItem('token')
  // 这里需要注意,必须return config才能生效
  return config
})

5、退出功能

  • 在退出按钮上绑定logout() 事件,清空本地存储的token并将路由重定向至登录页面。
logout() {
      window.sessionStorage.clear()
      this.$router.push('/login')
    }

至此一个完整的系统登录退出功能以完成!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zxBlogs/article/details/106071040

智能推荐

Hive中的lateral view 、explode、reflect、行转列、列转行、窗口函数与分析函数使用与区别详解_hive last_view_皮哥四月红的博客-程序员宅基地

目录一、使用explode函数将hive表中的Map和Array字段数据进行拆分二、使用explode函数拆分json字符串数据三、配合LATERAL VIEW使用四、列转行五、行转列六、reflect函数七、窗口函数与分析函数1、创建hive表并加载数据2、窗口函数3、OVER从句4、分析函数5、增强的聚合Cube和Grouping和Rollup6、使用cube和ROLLUP根据GROUP BY的维度的所有组合进行聚合。一、使用explode函...

axios: restful 风格的二次封装_lawler61的博客-程序员宅基地

JS axios: restful 风格的二次封装原文地址:JS axios: restful 风格的二次封装目前前端发送异步请求主要是:ajax、fetch、axios,对于三者的区别就不做具体的阐述本文以 axios 为例,讲解异步请求在项目中的具体应用axios 优点axios 的一大优点就是灵活,可以直接使用 axios 对象,也可以传递 AxiosRequestConfig...

MySQL最全整理(面试题+笔记+导图)_m0_71814093的博客-程序员宅基地

作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上,MySQL并不难,今天这份最全的MySQL总结,助你向大厂“开炮”,面试不再被MySQL难倒。1.1 MySQL 面试题(基础部分):1.2 MySQL 面试题(实战部分):1.3 MySQL 面试题(高级进阶部分):MySQL面试答案与解析:2.1 MySQL 性能优化的21个最佳实践2.2 MySQL 性能调

hive 的分区和分桶_张伯清的博客-程序员宅基地

转载:https://yq.aliyun.com/articles/513814#Hive中分区表及陷阱https://blog.csdn.net/qq_35180983/article/details/82902943

初学ASP.NET Core Razor 编程_weixin_30466039的博客-程序员宅基地

    离上次写博客已经过去好几年了,那是因为没有更新学习了,玩了几年。哈哈哈    耍安逸了,现在准备又开始刚毕业时的那种学习和工作状态,也给自己列了学习计划。希望用3个月时间好好学习下core并做几个小项目。    先从初级入门,参照DotNet菜园大神的教程自己写了一遍,地址https://www.cnblogs.com/chillsrc/p/9517172.html 感兴趣的可以...

Python3_50例练习_python 3 solidworks程序入门实例详解_十一姐的博客-程序员宅基地

Python 100例菜鸟教程python_100例练习:https://www.runoob.com/python/python-100-examples.html一日一练练习结果:https://github.com/Shirmay1/Python/tree/master/实例100

随便推点

linux安装 odbc mysql_LINUX安装ODBC驱动_勃恩泽的博客-程序员宅基地

解压:tar -zxvf unixODBC-2.3.1.tar.gz2、安装unixODBC-2.3.1.tar.gz#cd usr/local/unixODBC-2.3.1/#./configure –prefix=/usr/local/unixODBC-2.3.1 –includedir=/usr/include –libdir=/usr/lib -bindir=/usr/bin –sysco...

python函数_Sermiscry的博客-程序员宅基地

什么是函数:一系列Python语句的组合,可以在程序中运行一次或者多次,一般是完成具体的独立的功能为什么要使用函数:代码的复用最大化以及最小化冗余代码,整体代码结构清晰,问题局部化函数定义:def 函数名():函数体[一系列的python语句,表示独立的功能]函数的调用:本质上就是去执行函数定义里面的代码块,在调用函数之前 必须先定义参数的分类:必选参数、默认参数(缺省参数)、可选参数、关键字参数参数:其实就是函数为了实现某项特定的功能,进而为了得到实现功能所需要的数据(其实是为了得到

蓝牙协议分析(4)_IPv6 Over BLE介绍_子曰小玖的博客-程序员宅基地

1. 前言蓝牙是个奇葩的家伙:它总是以后来者的身份出现,很喜欢打仗,而且还不落下风(有点像某讯的风格)。90年代末期和Wi-Fi的无线标准之争如此,当前和802.15.4系(ZigBee、RF4CE、Thread等)的IoT之争,也如此。90年代末期,蓝牙刚出道的时候,就曾叫嚣着把Wi-Fi(802.11)从地球上抹去。反过来,1999年Wi-Fi 802.11b标准发布后,也宣称会把蓝牙干掉。最终,二者划江而治,瓜分了天下,Wi-Fi占据了家庭和办公室中的电脑网络,而蓝牙成为了广受欢迎的电脑和外

nvm 查看所有可以下载node的版本_nvm查看可下载node_集电极的博客-程序员宅基地

nvm 查看node有什么版本可以下载nvm list 命令 - 显示版本列表nvm list // 显示已安装的版本(同 nvm list installed)nvm list installed // 显示已安装的版本nvm list available // 显示所有可以下载的版本作者:时光已翩然轻擦链接:https://www.jianshu.com/p/13c0b3ca7c71来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...

21天学通JAVA-第7版 入门到精通完美高清PDF&amp;光盘源代码下载_21天学通java pdf_YYDOU的博客-程序员宅基地

PDF: https://u10806086.ctfile.com/fs/10806086-289412602光盘源代码:https://u10806086.ctfile.com/fs/10806086-292074846

collections.Counter类统计列表元素出现次数_不想悲伤到天明的博客-程序员宅基地

# 使用collections.Counter类统计列表元素出现次数from collections import Counternames = ["Stanley", "Lily", "Bob", "Well", "Peter", "Bob", "Well", "Peter", "Well", "Peter", "Bob", "Stanley", "Lily", "Bob"...

推荐文章

热门文章

相关标签