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 页面只自动刷新一次
Jul 10 Javascript
JavaScript Konami Code 实现代码
Jul 29 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
jquery在Chrome下获取图片的长宽问题解决
Mar 20 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 Javascript
JavaScript的兼容性与调试技巧
Nov 22 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
Angular PWA使用的Demo示例
Jan 31 Javascript
JavaScript页面倒计时功能完整示例
May 15 Javascript
vue实现移动端图片上传功能
Dec 23 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 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在线生成ico文件的代码
2007/10/09 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
JavaScript 学习点滴记录
2009/04/24 Javascript
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
Python中optparser库用法实例详解
2018/01/26 Python
详解Python自建logging模块
2018/01/29 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
表达自我的市场:Society6
2018/08/01 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
企业管理部经理岗位职责
2013/12/24 职场文书
入党介绍人评语
2014/05/06 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
转变工作作风心得体会
2016/01/23 职场文书
高中政治教学反思
2016/02/23 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
python开发制作好看的时钟效果
2022/05/02 Python