Vue+Express实现登录注销功能的实例代码


Posted in Javascript onMay 05, 2019
  • 对Vue全家桶有基本的认知.
  • 用有node环境
  • 了解express

一丶业务分析

1.什么情况下进行权限验证?

访问敏感接口

  • 前端向后端敏感接口发送ajax
  • 后端进行session验证,并返回信息
  • 前端axios拦截返回信息,根据返回信息进行操作

进行页面切换

  • 页面切换,触发vue-router的路由守卫
  • 路由守卫根据跳转地址进行验证,如需权限,则发送ajax至后端验证接口
  • 后端验证接口进行session验证,返回信息
  • 前端根据后端返回信息进行操作

2.前后端进行了怎么的交互?

登录

注销

Vue+Express实现登录注销功能的实例代码

二丶项目环境

基础环境( 有兴趣自己动手做一遍这个登录注册的,可进入github克隆基础环境 )

  • Vue(前端):vue vuex(存储状态) axios(发送,拦截ajax信息) vue-router(单页面路由)
  • Express(后端): express(后端服务器环境)

正式开发依赖

  • express-session(express中间件,用于生成session)

三丶项目开始前

1.创建项目目录,配置路由,创建页面跳转组件

项目目录:

创建components/route_list.vue进行页面跳转

<template>
  <div>
   <p><router-link :to="{name:'index'}">主页</router-link></p>
   <p><router-link :to="{name:'login'}">登录</router-link></p>
   <p><router-link :to="{name:'logout'}">注销</router-link></p>
   <p><router-link :to="{name:'me'}">个人信息</router-link></p>
   <p>登录状态:{{this.$store.state.me.login}}</p>
  </div>
 </template>

创建stores/me.js仓库,存放登录状态

import Vue from 'vue'
import router from '../router';
export default{
  namespaced:true,
  state:{
    login :false
  },
  mutations:{
    changeLogin(state,{result}){ 
      state.login = result;
    }
  },
  actions:{
    async checkMe({commit}){
      const result = await Vue.prototype.$http.get('/me').then(data=>data.data);
      if(!result){
        router.push({name:'login'})
        return
      }
      commit('changeLogin',{result})
    }
  }
}

views中 新建Login,Logout,Signin,me组件

路由信息写在router.js中

Vue+Express实现登录注销功能的实例代码

2.配置路由: 引入各个页面,进行路由跳转配置

后端配置express-session

//serve/app.js文件 express服务器 
const express = require('express')
//中间件--用于下发session
const session = require('express-session')
const app = express()

//使用express-session下发session
app.set('trust proxy', 1)
app.use(session({
 secret: 'keyboard cat',
 resave: false,
 saveUninitialized: true,
}))

四丶权限验证 - 敏感接口

1.主页Index.vue--访问敏感接口,展示敏感接口数据

<template>
  <div>
    //请求后台数据
    <Button @click="getTest">敏感接口</Button>
    //请求信息展示
    {{result}}
    //页面跳转组件
   <route_list></route_list>
  </div>
</template>

<script>
import route_list from '../components/route_list'
  export default {
    components:{
      route_list
    },
    data(){
      return{
        result:""
      }
    },
    methods:{
    //请求敏感接口
     async getTest(){
       this.result = await this.$http.get("/").then(res=>res.data)
     }
    }
  }
</script>

2.后端的敏感接口接收到请求,进行判断

app.get('/', function (req, res) {
 if(req.session.login){
  res.send("hello world")
 }else{
 res.send(403)
 }
})

3.axios--发送ajax后,对后端返回数据进行拦截,判断

import axios from 'axios';
import url from 'url';
import router from '../src/router'
//创建axios实例
var instance = axios.create({
  baseURL: '/api'
});

//拦截器
 instance.interceptors.response.use(
  function(response){
    return response;
  },function(error){
    //敏感接口.如果没有session跳转登录界面
    if(error.response.status==403){
      router.push({name:"login"})
    }
  }) 

export default instance;

如果返回结果为true,登录状态,就可以进行访问敏感接口了.

五丶权限验证 - 页面跳转

1.路由守卫,对跳转页面进行监视

//路由守卫
  router.beforeEach((to,from,next)=>{
 if(to.name != 'login' && to.name != 'index'){
  store.dispatch('me/checkMe')
 }
  next()
})

2.store中checkme,当跳转敏感页面时进行验证

actions:{
    async checkMe({commit}){
      //请求/me接口,对登录信息进行判断,并保留状态
      const result = await Vue.prototype.$http.get('/me').then(data=>data.data);
      //返回值为false,跳转至login
      if(!result){
        router.push({name:'login'})
        return
      }
      commit('changeLogin',{result})
    }
  }

3.后端的检测登录接口接收到请求,进行判断

//验证是否登录
app.get('/me', function (req, res) { 
//判断session是否为true
 if(req.session.login){
  res.send(true)
 }else{
  res.send(false)
 }
})

如果返回结果为true,登录状态,就可以进行页面跳转了.

六丶登录

1.登录页Login.vue - 请求登录接口,登录成功后将信息保存到store

<template>
  <div>
<h1>登录</h1>
<Button @click="login">登录</Button>
<route_list></route_list>
  </div>
</template>

<script>
import route_list from '../components/route_list'
  export default {
    components:{
      route_list
    },
   methods:{
     async login(){
     //请求登录接口
      const result = await this.$http.get("/login").then(data=>data.data);
      //记录登录状态
      this.$store.commit('me/changeLogin',{result})
     }
    },
}
</script>

2.后端登录接口接收到请求,生成session

//登录接口,更改session状态
app.get('/login', function (req, res) { 
 req.session.login = true,
 res.send(true)
})

现在就是登录状态了

七丶注销

1.登录页Logout.vue - 请求注销接口,注销成功后将信息保存到store

<template>
  <div>
    <h1>注销</h1>
<Button @click="login">注销</Button>
<route_list></route_list>
  </div>
</template>
<script>
import route_list from '../components/route_list'
  export default {
    components:{
      route_list
    },
  data(){
    return{
      
    }
  },
   methods:{
     async login(){
      const result = await this.$http.get("/logout").then(data=>data.data);
      this.$store.commit('me/changeLogin',{result})
     }
    },
    
}
</script>

2.后端注销接口接收到请求,更改session状态

//登录接口,更改session状态
app.get('/login', function (req, res) { 
 req.session.login = false,
 res.send(false)
})

现在就是注销状态了

总结

以上所述是小编给大家介绍的Vue+Express实现登录注销功能的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript中巧用“闭包”实现程序的暂停执行功能
Apr 04 Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
jQuery AjaxUpload 上传图片代码
Feb 02 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
May 17 Javascript
Js+Ajax,Get和Post在使用上的区别小结
Jun 08 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
Jul 07 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
详解angular element()方法使用
Apr 08 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
May 08 jQuery
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
js将键值对字符串转为json字符串的方法
Mar 30 Javascript
Vue 递归多级菜单的实例代码
May 05 #Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
May 05 #Javascript
详解Vue调用手机相机和相册以及上传
May 05 #Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 #Javascript
Angular实现svg和png图片下载实现
May 05 #Javascript
jQuery动态生成的元素绑定事件操作实例分析
May 04 #jQuery
node Buffer缓存区常见操作示例
May 04 #Javascript
You might like
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
Laravel日志用法详解
2016/10/09 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
Python的另外几种语言实现
2015/01/29 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
tornado 多进程模式解析
2018/01/15 Python
python检测服务器端口代码实例
2019/08/31 Python
python字符串格式化方式解析
2019/10/19 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
法学专业本科生自荐信范文
2013/12/17 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
新手上路标语
2014/06/20 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书