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 相关文章推荐
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
Feb 15 Javascript
JavaScript判断一个URL链接是否有效的实现方法
Oct 08 Javascript
最佳的addEvent事件绑定是怎样诞生的
Oct 24 Javascript
js replace 与replaceall实例用法详解
Aug 03 Javascript
jQuery及JS实现循环中暂停的方法
Feb 02 Javascript
jQuery插件Validate实现自定义表单验证
Jan 18 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
Nov 28 Javascript
JavaScript生成.xls文件的代码
Dec 22 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
Oct 22 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 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使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
浅谈Python NLP入门教程
2017/12/25 Python
代码分析Python地图坐标转换
2018/02/08 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
党课知识竞赛主持词
2014/04/01 职场文书
优秀高中学生评语
2014/12/30 职场文书