vue+axios新手实践实现登陆的示例代码


Posted in Javascript onJune 06, 2018

其实像这类的文章网上已经有很多很好的,写这篇文章,相当于是做个笔记,以防以后忘记

用到的:1、 vuex 2、axios 3、vue-route

登陆流程为:

1、提交登陆表单,拿到后台返回的数据

2、将数据存入vuex

vuex配置

这里直接跳过安装之类的,百度一大堆,我直接上代码

// store index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
// 初始化时用sessionStore.getItem('token'),这样子刷新页面就无需重新登录
const state = {
 user: window.sessionStorage.getItem('user'),
 token: window.sessionStorage.getItem('token')
}
const mutations = {
 //将token保存到sessionStorage里,token表示登陆状态
 SET_TOKEN: (state, data) => {
 state.token = data
 window.sessionStorage.setItem('token', data) 
 },
 //获取用户名
 GET_USER: (state, data) => {
 // 把用户名存起来
 state.user = data
 window.sessionStorage.setItem('user', data)
 },
 //登出
 LOGOUT: (state) => {
 // 登出的时候要清除token
 state.token = null
 state.user = null
 window.sessionStorage.removeItem('token')
 window.sessionStorage.removeItem('user')
 }
}

const actions = {
}
export default new Vuex.Store({
 state,
 mutations,
 actions
})

1、我在这里是将登录状态token,和用户名user存在sessionStorage里,以便组件使用,如果token为true则表示用户已经登陆sessionStorage和token这两个东西很简单用法自行百度

2、不要忘了在main.js引入store,vue实例中也要加入store

main.js

import store from './store/index'

new Vue({
 el: '#app',
 router,
 store,
 components: { App },
 template: '<App/>'
})

vue-route配置

import Vue from 'vue'
import Router from 'vue-router'
import Login from '../components/Login'
import Activity from '../components/Activity'
import Index from '../components/Index'
import store from '../store/index'

Vue.use(Router)

const router = new Router({
 routes: [
 {
  path: '/',
  name: '/',
  component: Index
 },
 {
  path: '/login',
  name: 'login',
  component: Login
 },
 {
  path: '/activity',
  name: 'activity',
  component: Activity,
  meta: {
  requireAuth: true // 添加该字段,表示进入这个路由是需要登录的
  }
 }
 ]
})

// 注册全局钩子用来拦截导航
router.beforeEach((to, from, next) => {
 const token = store.state.token
 if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
 if (token) { // 通过vuex state获取当前的token是否存在
  next()
 } else {
  console.log('该页面需要登陆')
  next({
  path: '/login'
  // query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
  })
 }
 } else {
 next()
 }
})

export default router

这里我用到router.beforeEach来实现拦截登陆,

1、在需要验证的路由的meta里加入我们自己的requireAuth
2、router.beforeEach里通过requireAuth验证该组件是否需要登陆
3、验证token如果为flase就表示未登陆跳转到登录页

axios发送请求

submitLogin () {
 this.$refs.loginForm.validate(valid => {
 if (valid) {
  axios.post('/login', {
  user: this.loginForm.user,
  pass: this.loginForm.pass
  })
  .then((response) => {
   if (response.status === 200) {
   this.$store.commit('SET_TOKEN', response.data.token)
   this.$store.commit('GET_USER', response.data.user)
   this.$message({
    message: '登陆成功',
    type: 'success'
   })
   this.$router.push({name: 'activity'})
   }
  })
  .catch(function (error) {
   console.log(error)
  })
 } else {
  console.log('error submit!!')
  return false
 }
 })
},

后台我没写,是用mock.js拦截ajax请求

因为我用的是element-ui所以上面代码有一些直接无视,看核心的就行

1、在数据返回成功后用this.$store.commit来更新vuex里的数据

2、登陆成功后跳转this.$router.push()跳转页面,

这里注意,如果你在前面导航拦截的钩子用了query: {redirect: to.fullPath}的话,这里就 用 this.$router.push(this.$route.query.redirect);这样页面就能跳到

你跳到登陆页面前要去的那个路由了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery select控制插件
Aug 17 Javascript
Javascript 设计模式(二) 闭包
May 26 Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
容易被忽略的JS脚本特性
Sep 13 Javascript
javascript电商网站抢购倒计时效果实现
Nov 19 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 Javascript
JS判断是否手机或pad访问实现方法
Dec 09 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 Javascript
vue2.0实现音乐/视频播放进度条组件
Jun 06 #Javascript
vue实现简单loading进度条
Jun 06 #Javascript
security.js实现的RSA加密功能示例
Jun 06 #Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 #Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 #Javascript
深入浅析Vue中的 computed 和 watch
Jun 06 #Javascript
详解创建自定义的Angular Schematics
Jun 06 #Javascript
You might like
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
php实现简单加入购物车功能
2017/03/07 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
php命令行模式代码实例详解
2021/02/26 PHP
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
微信小程序开发实现消息推送
2020/11/18 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
python中星号变量的几种特殊用法
2016/09/07 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python 同时运行多个程序的实例
2019/01/07 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
汉语专业应届生求职信
2013/10/01 职场文书
生产总经理岗位职责
2013/12/19 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
另类冲刺标语
2014/06/24 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
mysqldump进行数据备份详解
2022/07/15 MySQL