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 相关文章推荐
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
jquery设置元素的readonly和disabled的写法
Sep 22 Javascript
Javascript中实现trim()函数的两种方法
Feb 04 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
Mar 05 Javascript
全面解析bootstrap格子布局
May 22 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
如何在现代JavaScript中编写异步任务
Jan 31 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学习之PHP运算符
2006/10/09 PHP
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
解析php中的escape函数
2013/06/29 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
PHP速成大法
2015/01/30 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
python将unicode转为str的方法
2017/06/21 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
windows支持哪个版本的python
2020/07/03 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
Python eval函数原理及用法解析
2020/11/14 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
幼儿教育感言
2014/02/05 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
计算机网络专业求职信
2014/06/05 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
初中政教处工作总结
2015/08/12 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS