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 相关文章推荐
js拦截alert对话框另类应用
Jan 16 Javascript
使用JavaScript实现Java的List功能(实例讲解)
Nov 07 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
JavaScript将字符串转换成字符编码列表的方法
Mar 19 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
JavaScript实现的简单烟花特效代码
Oct 20 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
Dec 17 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 Javascript
angular ng-model 无法获取值的处理方法
Oct 02 Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 Javascript
jQuery+ajax实现用户登录验证
Sep 13 jQuery
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/01/21 PHP
php分页示例分享
2014/04/30 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
详解vue-cli3多环境打包配置
2019/03/28 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
Python实现二分法算法实例
2015/02/02 Python
python WindowsError的错误代码详解
2017/07/23 Python
python列表的增删改查实例代码
2018/01/30 Python
如何运行带参数的python脚本
2019/11/15 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python进行参数传递的方法
2020/05/12 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python 中Operator模块的使用
2021/01/30 Python
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
Servlet面试题库
2015/07/18 面试题
学生个人自我鉴定
2014/03/26 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
灵山大佛导游词
2015/02/04 职场文书
给学校的建议书400字
2015/09/14 职场文书