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 相关文章推荐
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
Jquery 表单验证类介绍与实例
Jun 09 Javascript
js日期、星座的级联显示代码
Jan 23 Javascript
thinkphp 表名 大小写 窍门
Feb 01 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
bootstrap-treeview自定义双击事件实现方法
Jan 09 Javascript
javascript实现去除HTML标签的方法
Dec 26 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
Mar 30 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
Jul 12 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
Mar 29 Javascript
layui select 禁止点击的实现方法
Sep 05 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 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
flash用php连接数据库的代码
2011/04/21 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
浅析jquery的作用与优势
2013/12/02 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
python基础教程之循环介绍
2014/08/29 Python
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python爬豆瓣电影实例
2018/02/23 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
工商管理本科生求职信
2014/07/13 职场文书
公司踏青活动方案
2014/08/16 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
发布会邀请函
2015/01/31 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
春节随笔
2015/08/15 职场文书