vuex + axios 做登录验证 并且保存登录状态的实例


Posted in Javascript onSeptember 16, 2018

还是那句话,网上找个完整的博客真的难,实现效果全靠摸索啊

第一步:安装axios 、vuex npm i -s axios npm i -s vuex 执行这两句 ,vue等环境搭建就不废话了

第二步:配置main.js文件

vuex + axios 做登录验证 并且保存登录状态的实例

上图不上码,菊花万人捅,附上代码

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import iView from 'iview';
import 'iview/dist/styles/iview.css';
import locale from 'iview/dist/locale/en-US';
import VueParticles from 'vue-particles';
import axios from 'axios' ;
import Vuex from 'vuex' //引入状态管理
 
Vue.use(VueParticles) ;
Vue.use(iView, { locale });
Vue.config.productionTip = false ;
Vue.prototype.$http = axios ;
Vue.use(Vuex) ;
 
 
const ADD_COUNT = 'ADD_COUNT'; // 用常量代替事件类型,使得代码更清晰
const REMOVE_COUNT = 'REMOVE_COUNT';
//注册状态管理全局参数
var store = new Vuex.Store({
 state:{
 token:'',
 userID:'',
 },
 mutations: {
 //写法与getters相类似
 //组件想要对于vuex 中的数据进行的处理
 //组件中采用this.$store.commit('方法名') 的方式调用,实现充分解耦
 //内部操作必须在此刻完成(同步)
 [ADD_COUNT] (state, token) { // 第一个参数为 state 用于变更状态 登录
  sessionStorage.setItem("token", token);
  state.token = token;
 },
 [REMOVE_COUNT] (state, token) { // 退出登录
 
  sessionStorage.removeItem("token", token);
 
  state.token = token;
 },
 }
});
 
 
router.beforeEach((to, from, next) => {
 iView.LoadingBar.start();//loadong 效果
 
 store.state.token = sessionStorage.getItem('token');//获取本地存储的token
 
 if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
 if (store.state.token !== "") { // 通过vuex state获取当前的token是否存
  next();
 }
 else {
  next({
  path: '/login',
  query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
  })
 }
 }
 else {
 next();
 }
})
 
router.afterEach(route => {
 iView.LoadingBar.finish();
});
 
 
/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 store, //注册组件
 components: { App },
 template: '<App/>'
}) ;

第三步:进行登录 操作,调用main.js 中定义好的修改token的方法[ADD_COUNT]

vuex + axios 做登录验证 并且保存登录状态的实例

附上请求部分代码

this.$http({
 method: 'get',
 url: '/api/login',
}).then(function(res){
 var json = res.data
 console.log(json.data);
 this.$Message.success('Success!');
 
 this.$store.commit('ADD_COUNT', json.data.token);
 
 let clock = window.setInterval(() => {
 this.totalTime-- ;
 if (this.totalTime < 0) {
  window.clearInterval(clock) ;
  this.$Loading.finish();
  this.$router.push('/') ;
 }
 },1000)
}.bind(this)).catch(function(err){
 this.$Message.error('登录失败,错误:'+ err);
 this.$Loading.error();
}.bind(this))

差点忘记了一点,在router中要配置需要验证是否登录的请求

vuex + axios 做登录验证 并且保存登录状态的实例

附上router/index.js 代码

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/components/Login/Login'
import P404 from '@/components/404/404'
import Main from '@/components/Main'
 
Vue.use(Router)
 
export default new Router({
 mode: 'history',
 routes: [
 {
  path: '/login',//登录页
  name: 'Login',
  component: Login
 },
 {
  path: '/',//首页
  name: 'Main',
  component: Main,
  meta: {
  requireAuth: true, // 添加该字段,表示进入这个路由是需要登录的
  },
 },
 { path: '*', component: P404 } //这里是保证错误地址会跳转到404界面进行提示
 ]
})

这些方法的编写顺序可能没有体现出来,不过最终效果就是这个了,如果有疑问欢迎留言。

以上这篇vuex + axios 做登录验证 并且保存登录状态的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 入门基础知识 想学习js的朋友可以参考下
Dec 26 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
js判断当前页面在移动设备还是在PC端中打开
Jan 06 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
Mar 09 Javascript
基于ES6 Array.of的用法(实例讲解)
Sep 05 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 Javascript
Koa代理Http请求的示例代码
Oct 10 Javascript
JavaScript中this的全面解析及常见实例
May 14 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
Aug 27 Javascript
JS多个异步请求 按顺序执行next实现解析
Sep 16 Javascript
JavaScript实现京东放大镜效果
Dec 03 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
Sep 16 #Javascript
vue将毫秒数转化为正常日期格式的实例
Sep 16 #Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 #Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 #Javascript
vue debug 二种方法
Sep 16 #Javascript
Vue刷新修改页面中数据的方法
Sep 16 #Javascript
Vue中使用vux配置代码详解
Sep 16 #Javascript
You might like
php无限遍历文件夹示例分享
2014/03/04 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
JsChart组件使用详解
2018/03/04 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python检测生僻字的实现方法
2016/10/23 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
UML设计模式笔试题
2014/06/07 面试题
电子商务专业学生的学习自我评价
2013/10/27 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
商场消防演习方案
2014/02/12 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
门市房租房协议书
2014/12/04 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
社区节水倡议书
2015/04/29 职场文书
大学生暑假实习总结
2015/07/13 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript