其实像这类的文章网上已经有很多很好的,写这篇文章,相当于是做个笔记,以防以后忘记

用到的:1、 vuex 2、axios 3、vue-route

登陆流程为:1、提交登陆表单,拿到后台返回的数据

2、将数据存入vuex

1、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/>'
})

2、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就表示未登陆跳转到登录页

3、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);这样页面就能跳到

你跳到登陆页面前要去的那个路由了

那个TOKEN我这里也没有使用,就是在页面请求的时候带上这个TOKEN,与后端核对。

axios新手实践实现登陆的更多相关文章

  1. vue+axios新手实践实现登陆

    vue+axios新手实践实现登陆 https://segmentfault.com/a/1190000015201803 增加 利用HTML5的history.replacestate()修改当前页 ...

  2. python新手 实践操作 作业

    #有如下值集合 [11,22,33,44,55,66,77,88,99],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中.即: {'k1': 大于66的所 ...

  3. Linux及安全实践三——程序破解

    Linux及安全实践三--程序破解 一.基本知识 常用指令机器码 指令 作用 机器码 nop 无作用(no operation) 90 call 调用子程序,子程序以ret结尾 e8 ret 返回程序 ...

  4. 【干货】基于镜像部署的Gitlab-CI/CD实践和坑位指南

    引言 看过前文的博友可能注意到我是把 部署dll文件拷贝到生产机器,之后在生产机器上使用docker-compose即时创建镜像, 并没有完成CI/CD, 只是在原来传统部署方式下 将部署文件容器化. ...

  5. AntDesign(React)学习-9 Dva model reducer实践

    今天肺炎增长数字依然吓人,感觉穿越到丧失片里了. 本节开始学习dva model使用,官网的讲解太文档化,对新手实践不太友好,自己简化了一个最简单的演示代码. 1.在src,models文件夹下创建u ...

  6. EcShop二次开发系列教程–总纲

    EcShop作为老牌的B2C独立网店系统,功能非常全名,强大的文件.数据库缓存机制,保证前后台系统执行速度更快.系统平稳运行.但是过多的功能也或多或少的会影响到系统的整个效率,所有在使用EcShop搭 ...

  7. <Programming Collective Intelligence> Chapter2:Making Recommendations

    <Programming Collective Intelligence> Chapter2:Making Recommendations 欧几里得距离评价 皮尔逊相关度评价 它相比于欧几 ...

  8. Vuejs技术栈从CLI到打包上线实战全解析

    前言 本文是自己vue项目实践中的一些总结,针对Vue2及相关技术栈,实践中版本为2.3.3. 开发前须知 vue-cli 在开发前,我们要至少通读一遍vue官方文档和API(看官方文档是最重要的,胜 ...

  9. Robotframework-Appium系列:登录操作

    之前Appium的环境已经配置完成(参考Robotframework-Appium系列:安装配置),接下来就是如何使用Appium来完成我们的apk的测试工作. 一.环境准备 所需的软件列表如下 Ro ...

随机推荐

  1. Django template配置

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join( ...

  2. python---生成式

    1.[(x,y) for x in [1,2,3] for y in [4,2,3] if x == y] (x,y):输出表达式,产生最终列表的元素 for x in [1,2,3] for y i ...

  3. log4j的配置学习

    我的 log4j.properties: # Set root category priority to INFO and its only appender to CONSOLE. #log4j.r ...

  4. CCCC L3-015. 球队“食物链”(dfs+剪枝)

    题意: 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席突发奇想,希望从中找出一条包含所有球队的 ...

  5. sql server 日期时间数据类型

    1.日期和时间数据类型 (1)在sqlserver 2008之前,SQL Server 支持datetime 和 smalldatetime 两种日期时间数据类型.这两种数据类型日期和时间是不可分割的 ...

  6. bzoj 4195程序自动分析

    先离散一下,然后并查集就好了. (一开始作大死,没全离散,WA一片) #include<bits/stdc++.h> #define INF 0x7fffffff #define LL l ...

  7. 常用ES6-ES10知识点总结

    在工作中我们会常用到的一些es6-es10的一些特性还记得多少,今天就让我们重新复习一遍 ES6语法 1.Let 1.let声明的变量具有块级作用域, { let a = 1 } console.lo ...

  8. oracle学习笔记(3)

    使用profile文件对口令进行管理 sql>create profile 文件名 limit failed_login_arrempts 3 password_lock_time 2; 将配之 ...

  9. 【Java】Java计时器(秒表)

    https://blog.csdn.net/c_jian/article/details/50506759 应用名称:Java计时器 用到的知识:Java GUI编程 开发环境:win8+eclips ...

  10. HZNU-ACM寒假集训Day9小结 倍增

    LCA 倍增法求最近公共祖先 首先对于每个结点先进行dfs预处理它的深度,再记录下它们往父亲方向走2的0次,1次...k次步所到达的结点.在这里2的k次大于整棵树的最大深度. 预处理完后,需要查询两个 ...