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日期时间与时间戳的转换函数分享
Jan 31 Javascript
简介JavaScript中的italics()方法的使用
Jun 08 Javascript
JS实现弹性菜单效果代码
Sep 07 Javascript
jQuery的each循环用法简单示例
Jun 12 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
Oct 28 Javascript
Javascript 动态改变imput type属性
Nov 01 Javascript
AngularJS实现单一页面内设置跳转路由的方法
Jun 28 Javascript
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
vue的token刷新处理的方法
Jul 17 Javascript
封装 axios+promise通用请求函数操作
Aug 11 Javascript
浅谈Web Storage API的使用
Jun 23 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
CodeIgniter CLI模式简介
2014/06/17 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python创建和删除目录的方法
2015/04/29 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
python安装twisted的问题解析
2018/08/21 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
keras slice layer 层实现方式
2020/06/11 Python
毕业自我鉴定
2013/11/05 职场文书
季度思想汇报
2014/01/01 职场文书
党课培训主持词
2014/04/01 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
工业设计专业自荐书
2014/06/05 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
python实现简单的井字棋
2021/05/26 Python
Go获取两个时区的时间差
2022/04/20 Golang