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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
Gird事件机制初级读本
Mar 10 Javascript
javascript Demo模态窗口
Dec 06 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
Oct 10 Javascript
jQuery实用基础超详细介绍
Apr 11 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
jQuery移除元素自动解绑事件实现思路及代码
May 31 Javascript
jQuery中next方法用法实例
Apr 24 Javascript
全屏js头像上传插件源码高清版
Mar 29 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
Apr 08 Javascript
js实现省级联动(数据结构优化)
Jul 17 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实现图片添加水印功能
2014/02/13 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python 专题四 文件基础知识
2017/03/20 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
python实现websocket的客户端压力测试
2019/06/25 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
《难忘的泼水节》教学反思
2014/02/27 职场文书
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技