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访问XML数据的实例
Dec 27 Javascript
调试代码导致IE出错的避免方法
Apr 04 Javascript
JS随机打乱数组的方法小结
Jun 22 Javascript
详细总结Javascript中的焦点管理
Sep 17 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
Oct 26 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
Feb 23 Javascript
JS实现复制功能
Mar 01 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
使用angular-cli webpack创建多个包的方法
Oct 16 Javascript
js校验开始时间和结束时间
May 26 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
解析python实现Lasso回归
2019/09/11 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
外语系毕业生找工作的求职信
2013/11/28 职场文书
中国梦的演讲稿
2014/01/08 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
旷课检讨书大全
2014/01/21 职场文书
就职演讲稿范文
2014/05/19 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
教师师德师风整改措施
2014/10/24 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python