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动态创建div
Sep 25 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
Jan 02 Javascript
javascript学习笔记(一)基础知识
Sep 30 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
Mar 30 Javascript
javaScript中slice函数用法实例分析
Jun 08 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
js基础之DOM中元素对象的属性方法详解
Oct 28 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
Mar 03 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
JS+css3实现幻灯片轮播图
Aug 14 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
javascript实现倒计时提示框
2021/03/02 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
Python中return self的用法详解
2018/07/27 Python
Python实现网站表单提交和模板
2019/01/15 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
在Python中实现字典反转案例
2020/12/05 Python
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
家长会邀请书
2014/01/25 职场文书
大学生村官承诺书
2014/03/28 职场文书
推荐信模板
2014/05/09 职场文书
企业宣传策划方案
2014/05/29 职场文书
学校三节实施方案
2014/06/09 职场文书
电子专业求职信
2014/06/19 职场文书
法制宣传标语
2014/06/23 职场文书
2014年党小组工作总结
2014/12/20 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers