vue实现登陆登出的实现示例


Posted in Javascript onSeptember 15, 2017

最近接手的B端项目选择了vue来做,此项目使用element ui Message等为组件 望周知

需求

  • 登陆成功后跳转至首页
  • 首页不能手动跳转至登陆页
  • 登陆后跳转至目标页面

此次B端SPA项目把ak存在localstorage中

1.登陆的跳转利用全局钩子router.beforeEach

//router.js
router.beforeEach((to, from, next) => {
 // 若userkey不存在并且前往页面不是登陆页面,进入登陆
 // 若userkey存在并且前往登陆页面,进入主页
 const userKey = localStorage.getItem('userKey')
 if (!userKey && to.path !== '/login') {
  next({
   path: '/login',
   query: { redirect: to.fullPath }
  })
 } else if (userKey && to.path === '/login') {
  next({ path: '/' })
 } else {
  next()
 }
})

上面使用了query带上目标参数

例子:#/login?redirect=%2Fapp

在登陆提交处还得对redirect参数进行处理

//若验证成功跳转
 var redirect = decodeURIComponent(this.$route.query.redirect || '/')
     self.$router.push({
      // 你需要接受路由的参数再跳转
      path: redirect
     })

需求

若ak失效后发送请求时弹出失效弹出框返回到登陆页面

以下做了个简单的例子若请求返回的参数带0则登陆失效

// respone拦截器
axios.interceptors.response.use(
 response => {
  console.log(response)
  const data = response.data
  if (data.status === 0) {
   MessageBox.alert('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
    confirmButtonText: '确定',
    type: 'warning'
   }).then(() => {
    localStorage.clear()
    router.replace({
     path: '/login'
    })
    return
   }).catch(() => {
    localStorage.clear()
    router.replace({
     path: '/login'
    })
   })
  } else {
   return response
  }
 },
 error => {
  if (error && error.response) {
   switch (error.response.status) {
    case 400:
     error.message = '请求错误'
     break
    case 401:
     error.message = '未授权,请登录'
     break
    case 403:
     error.message = '拒绝访问'
     break
    case 404:
     error.message = (process.env.NODE_ENV === 'production' ? `请求地址出错` : `请求地址出错: ${error.response.config.url}`)
     break
    case 408:
     error.message = '请求超时'
     break
    case 500:
     error.message = '服务器内部错误'
     break
    case 501:
     error.message = '服务未实现'
     break
    case 502:
     error.message = '网关错误'
     break
    case 503:
     error.message = '服务不可用'
     break
    case 504:
     error.message = '网关超时'
     break
    case 505:
     error.message = 'HTTP版本不受支持'
     break
    default:
   }
   Message({
    message: error.message,
    type: 'error',
    duration: 5 * 1000
   })
  }
  return Promise.reject(error)
 }
)

需求

手动登出

loginOut() {
   var self = this
   this.$confirm('您确定要退出吗?', '退出管理平台', {
    confirmButtonText: '确定',
    cancelButtonText: '取消'
   }).then(() => {
    const info = {
     'userkey': localStorage.getItem('userKey')
    }
    self.$store.dispatch('LogOut', info).then(() => {
     self.$router.push({ path: '/login' })
    }).catch(() => {
    })
   }).catch(() => {

   })
  }

简单的登陆登出结束啦~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
Jan 07 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
介绍JavaScript的一个微型模版
Jun 24 Javascript
js生成随机数的方法实例
Oct 16 Javascript
JavaScript数组去重的两种方法推荐
Apr 05 Javascript
JavaScript基础语法之js表达式
Jun 07 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
Apr 27 Javascript
讲解vue-router之什么是嵌套路由
May 28 Javascript
Vue.extend 编程式插入组件的实现
Nov 18 Javascript
OpenLayers3实现对地图的基本操作
Sep 28 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
Sep 15 #Javascript
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 #jQuery
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 #Javascript
vue用addRoutes实现动态路由的示例
Sep 15 #Javascript
Vue渲染函数详解
Sep 15 #Javascript
JavaScript中如何判断一个值的类型
Sep 15 #Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 #Javascript
You might like
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
深入理解javascript中defer的作用
2013/12/11 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
简单解析Django框架中的表单验证
2015/07/17 Python
python实现TF-IDF算法解析
2018/01/02 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
国际象棋商店:The Chess Store
2018/07/09 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
override和overload的区别
2016/03/09 面试题
毕业生自我鉴定
2013/12/04 职场文书
市场部经理岗位职责
2014/04/10 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
幼师辞职信范文
2015/02/27 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server