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 CSS画图之基础篇
Jul 29 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
js判断手机号运营商的方法
Oct 23 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
jquery.masonry瀑布流效果
May 25 jQuery
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 Javascript
ionic2中使用自动生成器的方法
Mar 04 Javascript
jquery简易手风琴插件的封装
Oct 13 jQuery
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通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
PHP多进程编程实例详解
2017/07/19 PHP
python进程与线程小结实例分析
2018/11/11 PHP
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
node结合swig渲染摸板的方法
2018/04/11 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
python常用函数详解
2016/09/13 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
python调用java的jar包方法
2018/12/15 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
python logging通过json文件配置的步骤
2020/04/27 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
岗位职责范本
2013/11/23 职场文书
传媒专业推荐信范文
2013/11/23 职场文书
机关出纳岗位职责
2014/04/03 职场文书
终止劳动合同协议书
2014/04/14 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
后进生评语大全
2015/01/04 职场文书
办公室禁烟通知
2015/04/23 职场文书
社区文明倡议书
2015/04/28 职场文书
体育部部长竞选稿
2015/11/21 职场文书