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 相关文章推荐
在textarea中屏蔽js的某个function的javascript代码
Apr 20 Javascript
跟着Jquery API学Jquery之一 选择器
Apr 07 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 Javascript
通过javascript获取iframe里的值示例代码
Jun 24 Javascript
一个不错的仿携程自定义数据下拉选择select
Sep 01 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
vue-cli中vue本地实现跨域调试接口
Jan 16 Javascript
JSON.stringify()方法讲解
Jan 31 Javascript
JavaScript函数重载操作实例浅析
May 02 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
一个多文件上传的例子(原创)
2006/10/09 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
JavaScript中this用法学习笔记
2019/03/17 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
python中的多线程实例教程
2014/08/27 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Python argparse模块应用实例解析
2019/11/15 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
自我评价是什么
2014/01/04 职场文书
网管求职信
2014/03/03 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
MySQL 条件查询的常用操作
2022/04/28 MySQL
GPU服务器的多用户配置方法
2022/07/07 Servers