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图片预加载 JS实现图片预加载应用
Dec 03 Javascript
纯javascript实现分页(两种方法)
Aug 26 Javascript
JavaScript jquery及AJAX小结
Jan 24 Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 Javascript
Angular.Js的自动化测试详解
Dec 09 Javascript
利用Node.js对文件进行重命名
Mar 12 Javascript
AngularJS中下拉框的高级用法示例
Oct 11 Javascript
浅谈React 服务器端渲染的使用
May 08 Javascript
element-ui使用导航栏跳转路由的用法详解
Aug 22 Javascript
VueCli3构建TS项目的方法步骤
Nov 07 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
Aug 08 Javascript
js实现跳一跳小游戏
Jul 31 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
加强版phplib的DB类
2008/03/31 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
深入浅析python继承问题
2016/05/29 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
高中自我鉴定范文
2013/11/03 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
运动会开幕式主持词
2014/03/28 职场文书
学校运动会通讯稿
2015/07/18 职场文书
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android