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 相关文章推荐
分析 JavaScript 中令人困惑的变量赋值
Aug 13 Javascript
从数组中随机取x条不重复数据的JS代码
Dec 24 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
Nov 30 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
Dec 20 Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 Javascript
详解微信小程序开发用户授权登陆
Apr 24 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 Javascript
Vue组件简易模拟实现购物车
Dec 21 Vue.js
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 htmlspecialchars加强版
2010/02/16 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
完善的jquery处理机制
2016/02/21 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
Python判断字符串与大小写转换
2015/06/08 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
介绍一下Java的事务处理
2012/12/07 面试题
学生会宣传部部长竞选演讲稿
2014/04/25 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
2014年底工作总结
2014/12/15 职场文书
员工离职感谢信
2015/01/22 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏