node登陆接口权限配置cookie-parser、express-session

简介: 本文介绍了在Node.js中使用express-session和cookie-parser实现登录接口的权限配置,包括验证码接口的生成和自定义中间件的创建,用于验证用户权限。

主要核心:

1.express-session
2.cookie-parser
3.node自定义中间件
安装第三方插件

npm i express-session   cookie-parser

我先描述一下我自己的需求逻辑,首先我在登录页面的时候就链接了一个验证码的接口,获取验证码:
业务是自己设计的 ,也有不合理的地方。
前端代码:

    getCaptchaCode(){
   
        axios.get('/getCaptchaCode').then(res=>{
   
              let getCaptchaCode= document.getElementById('getCaptchaCode')
              getCaptchaCode.innerHTML = res.data.data.code
        })
    }

在挂载的时候调用了一下,这个接口随时都可以访问,谁也可以访问,但是除了这个接口,就都需要权限来控制,
我在node服务端这样写了这个接口:
首先看一下我的app.js这个文件,我引入了cookie、session这两个包,主要是对这两个加了签名密钥,相对来讲更加安全一些

//引用session
var session = require("express-session");
var cookieParser = require("cookie-parser")
//用来设置签名密钥
app.use(cookieParser('zjq'))

// express中是把session信息存储在内存中
// 配置session
app.use(session({
   
  secret: "zjq", //设置签名秘钥 内容可以任意填写  但是要和cookieParser相匹
  cookie: {
    maxAge: 60 * 1000 * 60 }, //设置cookie的过期时间,例:80s后    session和相应的cookie失效过期
  resave: true, //强制保存,如果session没有被修改也要重新保存
  saveUninitialized: false //如果原先没有session那么久设置,否则不设置
}))

这是验证码接口

// 验证码配置信息
const options = {
   
  size: 5,                 // 验证码长度(显示几个字符)
  fontSize: 30,           // 验证码的字体大小
  ignoreChars: '0o1i', // 验证码字符中排除 0o1i
  width: 100,              // 验证码的宽度
  height: 36,             // 验证码的高度
  background: '#cc9966',   // 验证码的背景颜色
};
//验证码接口
//randomStr 前端发送一个随机的字符
router.get('/getCaptchaCode', (req, res) => {
   
  let randomStr = new Date().getTime() + 'a' + String(Math.floor(Math.random() * (10000 - 9000) + 9000)) + 'a'
  req.session.name = randomStr;
  res.cookie("name", randomStr, {
    maxAge: 60*1000*60, signed: true });
  console.log(req.session.name,'req.session.name');
  let code = captcha.create(options)
  console.log(code.text, 'code.text', randomStr);
  res.send(endMassage({
    data: "验证码获取成功1111", code: code.data, randomStr, session: req.session.name }))
})

生成了时间吹和一个随机数为了更大的减少重复的可能性,然后分别给了cookie的name和session的name,
在这里设置cookie是:

res.cookie("name", randomStr, {
    maxAge: 60*1000*60, signed: true });

的第一个参数是cookie名,第二个参数cookie名所对应的value,第三个参数是一个对象,maxAge的意思是过期时间signed是否使用签名密钥

生成的这两个name,cookie的name会被验证码接口带到前端,
在这里插入图片描述
这两个cookie会被浏览器存起来:
在这里插入图片描述

这里面的name是我们手动加的,connect.sid是自动生成的,和session有关系,就说req.sessionID;

node自定义中间件

//cookic控制中间件
router.use((req, res, next) => {
   
  req.signedCookies['name'] ? req.signedCookies['name'] : res.send(endMassage({
    data: "没有权限", code: 0 }))
  req.session.name ? req.session.name : res.send(endMassage({
    data: "没有权限", code: 0 }))
  if (req.signedCookies['name'] != req.session.name) {
   
    // if (!req.sessionID) {
   
    console.log("没有权限");
    res.send(endMassage({
    data: "没有权限", code: 0 }))
  }
  else {
   
    console.log("本次的connect.sid为", req.signedCookies);
    // console.log("本次的req.sessionID", req.sessionID);
    next()
  }
})

在这里进行了判断,取当前的cookie,因为咱们这是取签名密钥的cookie,所以使用

req.signedCookies['name']

的形式来取,主要是signedCookies这个对象。他会给我们将解密好的cookie字段展示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
每一个用户的cookie都是在获取验证码的时候生成的,才有的cookie和session,在访问其他接口的时候没用name字段就直接在中间件中拒绝访问。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

上面流程图来自网络,如侵权请联系删除。

目录
相关文章
|
2月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
3月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
1903 23
|
4月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
152 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
3月前
|
Prometheus 监控 JavaScript
Node.js连接池配置的五个隐形陷阱与防御体系:从创业公司血泪史说起
文章以创业公司血泪史为例,详细阐述了 Node.js 连接池配置的五个隐形陷阱及防御体系。包括连接泄漏、配置参数算术错误、异步异常导致崩溃、跨连接事务问题、监控缺失,并介绍了相应的解决办法和终极防御手段,强调在确定性与不确定性中寻找平衡,建立自适应机制。
78 13
|
8月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
8月前
|
开发框架 JavaScript 前端开发
使用 Node.js 和 Express 构建 Web 应用
【10月更文挑战第2天】使用 Node.js 和 Express 构建 Web 应用
|
7月前
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
420 58
|
5月前
|
JavaScript 算法 安全
深度剖析:共享文件怎么设置密码和权限的 Node.js 进阶算法
在数字化时代,共享文件的安全性至关重要。本文聚焦Node.js环境,介绍如何通过JavaScript对象字面量构建数据结构管理文件安全信息,包括使用`bcryptjs`库加密密码和权限校验算法,确保高效且安全的文件共享。通过实例代码展示加密与权限验证过程,帮助各行业实现严格的信息资产管理与协作。
|
7月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
7月前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。

热门文章

最新文章