Vue实战之vue登录验证的实现代码


Posted in Javascript onOctober 31, 2017

最近一直在撸一个给大学生新生用的产品,在撸的时候有时候会发现自己力不从心,是不是我的能力下降,是不是我该放弃我的最热爱的事业了?这对我的心灵造成了巨大的伤害,所以我决定向苍老师起誓一定练好我这双手——好好写代码(想多的同学赶紧去面壁5秒钟再过来往下看)~~~

我做的这个产品是课堂在线编程教学工具,由于涉及到商业问题,这里就不能和大家分享了,但是我可以把里面我认为很牛(zhuang)X(bi)的技术和大家分享分享啊。

如果你觉得我写的很 low的话欢迎加入igeekbar裙里来喷我啊,我在那里等你啊,我相信赞美会有很多故事哟。哈哈,废话不多说了,进入干货分享啦~~~

先从登录分享吧,登录是我写完项目后加上的,一开始没有考虑到登录问题,后来加的,看了一些人分享的登录,感觉都太牛逼了(主要我理解能力差看不懂)。最后自己搞了一套。

使用的技术:

  1. vue
  2. vue-router
  3. vuex

首先明确的一点vue是一个写但页面的框架,以前在做登录的时候,也许是后端来控制登录的状态,把登陆的信息会放在cookie里。前端也可以做登录验证的,这主要是基于但页面引入路由的功能得以实现的。

在vue-router里有个钩子函数 beforeEach (导航守卫)多霸气的名字,故名YY就是这是我家没我的邀请名片都给我滚蛋,还想过来和我一起看苍老师。beforeEach 接受三个参数(to, from, next)分别是to: 小伙要去哪里, from: 小伙从那里来, next: 美女您请进,小心路滑啊。姑且你们认为我写的很形象啊,如果你感到不服去看 文档 啊!

理解里 beforeEach 那我们就可以区搞事情了。基本的思路是:

  1. 我要从router的信息里面拿到 meta 用户的源信息,如果没有就让这?潘抗龅埃?帐八??阍倮矗ㄒ簿褪侨サ锹迹?/li>
  2. 如果没有源信息的话,就等跳到 igeekbar 裙里来瞅瞅,拿到入场圈(也就是登录后拿到了返回结果并存在router的源信息中,用于之后路由跳转的验证)

写到这里突然感觉这貌似谁都懂的啊,不管了写这么多,就当你是小白吧(哈哈哈)

下面直接上代码:

在 router.js 路由中添加一下代码

// router.js
router.beforeEach((to, from, next) => {
 if (!to.meta.user) {
  // todo 请求接口获取数据
  loadUserData().then(user => {
   // 存放源信息
   to.meta.user = user
   // 存在 vuex 中
   store.state.user = user
   if(user){
    next()
   }else{
    next({
     path: '/'
    })
   }
  })
 } else {
  next()
 }
})

统一处理接口的文件api.js

// api.js
import axios from 'axios'

// 封装ajax 的 fetch
export let fetch = (method, url, data, forceLogin = true) => {
 return new Promise((resolve, reject) => {
  axios({
   ...data,
   method: method,
   url: url
  }).then(response => {
   resolve(response.data)
  }).catch(err => {
   reject(err)
  })
 })
}

// 获取用户信息
export let loadUserData = () => {
 return new Promise((resolve, reject) => {
  let user = null
  let cacheKey = 'authUserJsonStr'
  let authUserJsonStr = sessionStorage.getItem(cacheKey)
  if (authUserJsonStr) {
   user = JSON.parse(sessionStorage.getItem(cacheKey))
   resolve(user)
  } else {
   fetch('GET', '/api/auth_info/', {}, false).then((data) => {
    user = data
    sessionStorage.setItem(cacheKey, JSON.stringify(user))
    resolve(user)
   }).catch(() => {
    resolve(null)
   })
  }
 })
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 改变CSS样式基础代码
Feb 11 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
Nov 30 Javascript
目前流行的JavaScript库的介绍及对比
Sep 29 Javascript
JavaScript自定义日期格式化函数详细解析
Jan 14 Javascript
js语法学习之判断一个对象是否为数组
May 13 Javascript
js中iframe调用父页面的方法
Oct 30 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
下雪了 javascript实现雪花飞舞
Aug 02 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
jQuery ajax读取本地json文件的实例
Oct 31 #jQuery
ES6解构赋值的功能与用途实例分析
Oct 31 #Javascript
js原生日历的实例(推荐)
Oct 31 #Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 #Javascript
详解RequireJs官方使用教程
Oct 31 #Javascript
React Native中导航组件react-navigation跨tab路由处理详解
Oct 31 #Javascript
ES6解构赋值实例详解
Oct 31 #Javascript
You might like
PHP 判断变量类型实现代码
2009/10/23 PHP
浅谈Javascript事件模拟
2012/06/27 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
Javascript的this用法
2017/01/16 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
python查询mysql中文乱码问题
2014/11/09 Python
python传递参数方式小结
2015/04/17 Python
python图像处理之反色实现方法
2015/05/30 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
《桂花雨》教学反思
2014/04/12 职场文书
防火标语大全
2014/10/06 职场文书
农业生产宣传标语
2014/10/08 职场文书
2014年民警工作总结
2014/11/25 职场文书
创先争优个人总结
2015/03/04 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs