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 相关文章推荐
js时间日期和毫秒的相互转换
Feb 22 Javascript
jquery跟js初始化加载的多种方法及区别介绍
Apr 02 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
Jun 16 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
Dec 31 Javascript
jQuery实现移动端Tab选项卡效果
Mar 15 Javascript
利用node.js实现反向代理的方法详解
Jul 24 Javascript
React中使用UEditor百度富文本的方法
Aug 22 Javascript
layui扩展上传组件模拟进度条的方法
Sep 23 Javascript
vue实现修改图片后实时更新
Nov 14 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
React 条件渲染最佳实践小结(7种)
Sep 27 Javascript
利用promise及参数解构封装ajax请求的方法
Mar 24 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防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
python 输出一个两行字符的变量
2009/02/05 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
解决yum对python依赖版本问题
2019/07/05 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
Python将字典转换为XML的方法
2020/08/01 Python
详解python metaclass(元类)
2020/08/13 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
求网格中的黑点分布
2013/11/06 面试题
农村党支部先进事迹
2014/01/14 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书