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 相关文章推荐
XRegExp 0.2: Now With Named Capture
Nov 30 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
jQuery右下角旋转环状菜单特效代码
Aug 10 Javascript
快速掌握Node.js环境的安装与运行方法
Feb 16 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 Javascript
浅析Javascript中bind()方法的使用与实现
Apr 29 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
Oct 12 Javascript
详解vue-cli@2.x项目迁移日志
Jun 06 Javascript
JavaScript中ES6规范中let和const的用法和区别
Aug 06 Javascript
js利用拖放实现添加删除
Aug 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 的几个配置文件函数
2006/12/21 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
PHP数组操作类实例
2015/07/11 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
用Python逐行分析文件方法
2019/01/28 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
python随机数分布random均匀分布实例
2019/11/27 Python
Python数组并集交集补集代码实例
2020/02/18 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
请解释virtual关键字的含义
2015/06/17 面试题
工程监理应届生求职信
2013/11/09 职场文书
班训口号大全
2014/06/18 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电