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 相关文章推荐
浅谈javascript 面向对象编程
Oct 28 Javascript
IE bug table元素的innerHTML
Jan 11 Javascript
Javascript设计模式之观察者模式(推荐)
Mar 29 Javascript
聊一聊jQuery插件uploadify使用方法
Aug 24 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
Dec 19 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
Vue动态实现评分效果
May 24 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
Mar 17 Javascript
vue axios请求超时的正确处理方法
Apr 02 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
Sep 15 Javascript
react项目如何使用iconfont的方法步骤
Mar 13 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
JAVA/JSP学习系列之四
2006/10/09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
[00:14]护身甲盾
2019/03/06 DOTA
Python单元测试框架unittest简明使用实例
2015/04/13 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Python实战之制作天气查询软件
2019/05/14 Python
python nmap实现端口扫描器教程
2020/05/28 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
css sprite简单实例
2016/05/23 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
大学校运会广播稿
2014/02/03 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
面试必备的求职信
2014/05/25 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
初中班干部工作总结
2015/08/10 职场文书
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python