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 相关文章推荐
jqgrid 表格数据导出实例
Nov 21 Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
JS实现DIV容器赋值的方法
Dec 14 Javascript
JavaScript基础语法之js表达式
Jun 07 Javascript
关于js二维数组和多维数组的定义声明(详解)
Oct 02 Javascript
JS+HTML5 FileReader对象用法示例
Apr 07 Javascript
关于Bootstrap按钮组件消除黄框的方法
May 19 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
Sep 16 Javascript
详解Vue内部怎样处理props选项的多种写法
Nov 06 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
Nov 09 Javascript
vue项目接口域名动态获取操作
Aug 13 Javascript
vscode中使用npm安装babel的方法
Aug 02 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
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
使用javascript插入样式
2016/03/14 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
2020/09/04 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
浅析Python中的for 循环
2016/06/09 Python
Python实现的计算器功能示例
2018/04/26 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
django model object序列化实例
2020/03/13 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
大学生思想汇报范文
2013/12/31 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
工程技术员岗位职责
2015/04/11 职场文书
教师师德承诺书2016
2016/03/25 职场文书
java设计模式--原型模式详解
2021/07/21 Java/Android