Vue+Express实现登录,注销

栏目: Node.js · 发布时间: 6年前

内容简介:如果返回结果为true,登录状态,就可以进行访问敏感接口了.如果返回结果为true,登录状态,就可以进行页面跳转了.现在就是登录状态了
  • 对Vue全家桶有基本的认知.
  • 用有node环境
  • 了解express

一丶业务分析

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

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

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

  • 登录
  • 注销
Vue+Express实现登录,注销

二丶项目环境

三丶项目开始前

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)
})
复制代码

现在就是注销状态了


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具