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 Event学习补遗 addEventSimple
Feb 11 Javascript
深入理解javascript动态插入技术
Nov 12 Javascript
asp知识整理笔记3(问答模式)
Sep 27 Javascript
详解JavaScript中基于原型prototype的继承特性
May 05 Javascript
ThinkJS中如何使用MongoDB的CURD操作
Dec 13 Javascript
javascript数据结构之串的概念与用法分析
Apr 12 Javascript
jQuery实现选中行变色效果(实例讲解)
Jul 06 jQuery
使用Vue动态生成form表单的实例代码
Apr 26 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
Jul 13 Javascript
详解在Node.js中发起HTTP请求的5种方法
Jan 10 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
Nov 07 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 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
德劲1107的电路分析与打磨
2021/03/02 无线电
将数组写入txt文件 var_export
2009/04/21 PHP
PHP输入流php://input介绍
2012/09/18 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
Javascript 二维数组
2009/11/26 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
python删除文件示例分享
2014/01/28 Python
Django的session中对于用户验证的支持
2015/07/23 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
Win8下python3.5.1安装教程
2020/07/29 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
2020/01/09 Python
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
村长反四风问题个人对照检查材料
2014/09/21 职场文书
600字作文之感受大自然
2019/11/27 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS