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 相关文章推荐
关于viewport,Ext.panel和Ext.form.panel的关系
May 07 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
Dec 05 Javascript
javascript实现的固定位置悬浮窗口实例
Apr 30 Javascript
jquery实现顶部向右伸缩的导航区域代码
Sep 02 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
javascript原型继承工作原理和实例详解
Apr 07 Javascript
angular学习之从零搭建一个angular4.0项目
Jul 10 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
Jan 24 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
Vue之封装公用变量以及实现方式
Jul 31 Javascript
Vue和Flask通信的实现
May 19 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自动加载机制的深入分析
2013/06/08 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
php时间戳转换代码详解
2019/08/04 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
python提取照片坐标信息的实例代码
2019/08/14 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
农行实习自我鉴定
2013/09/22 职场文书
财务会计专业求职信范文
2013/12/31 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
3分钟演讲稿
2014/04/30 职场文书
个人授权委托书范本
2014/09/14 职场文书
淘宝好评语句大全
2014/12/31 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS