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 实现的自定义对话框
Mar 24 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
Nov 02 Javascript
jQuery链使用指南
Jan 20 Javascript
学习Javascript面向对象编程之封装
Feb 23 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
Feb 21 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
es6的数字处理的方法(5个)
Mar 16 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
Apr 22 Javascript
详解如何使用webpack+es6开发angular1.x
Aug 16 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
Jan 26 Javascript
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/12/18 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
微信公众号token验证失败解决方案
2019/07/22 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
python如何求圆的面积
2020/07/01 Python
如何基于Python按行合并两个txt
2020/11/03 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
工商行政管理专业求职书
2014/05/23 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js