ESP32-Web-Server编程- 实现 Web 登录网页

ESP32-Web-Server编程- 实现 Web 登录网页

概述

是时候实现更加安全的网页了。登录机制是最简单的控制网页访问权限的方法。

需求及功能解析

本节演示如何在 ESP32 上部署一个 Web 服务器,并建立登录页面的机制,用户可以实现登录、登出的功能,控制通过网页访问 ESP32 的内部信息的权限。

目录结构

├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│   └── main.c                 User application
├── components
│   └── fs_image
└── README.md                  This is the file you are currently reading
  • 目录结构主要包含主目录 main,以及组件目录 components.
  • 其中组件目录components中包含了用于存储网页文件的 fs_image 目录(即前述前端文件)。

前端代码

登录机制的实现主要是在 JS 文件内。首先在 components/fs_image/web_image/js/index.js 中设置了检查函数,通过检查 是否使能了 login_user,来判断是否跳转到登录界面 login.html.

$(function(){if(!sessionStorage.getItem('login_user')){window.location = "./login.html";}$("#logout").click(function(){var xhr = new XMLHttpRequest();xhr.open("GET", "./logout", true);xhr.send();setTimeout(function(){ window.open("/logged-out","_self"); }, 1000);})
})

然后在 components/fs_image/web_image/login.html 中设计登录界面,登录界面包含登录需要的 logemail、password 输入框,和登录提交 submit 按钮。

<div class="form-group"><input type="email" name="logemail" class="form-style" placeholder="账号" id="loginuser" autocomplete="off"><i class="input-icon uil uil-at"></i>
</div>	
<div class="form-group mt-2"><input type="password" name="logpass" class="form-style" placeholder="密码" id="loginpwd" autocomplete="off"><i class="input-icon uil uil-lock-alt"></i>
</div>
<a href="#" id="submit" class="btn mt-4">提交</a>

在点击提交时,会触发 components/fs_image/web_image/js/login.js 中的提交帐号、密码的函数 submit().

后端代码

后端代码主要是增加了校验前端网页提交的帐号、密码的函数 login_post_handler()

{"/loginpwd", HTTP_POST, login_post_handler, rest_context},

在该函数中,接收推动数据,并解析推送数据中的帐号、密码:

static esp_err_t login_post_handler(httpd_req_t* req)
{char user[USER_NAME_MAX_LEN];char password[PASSWORD_MAX_LEN];char* buf = ((rest_server_context_t*) (req->user_ctx))->scratch;int str_len = 0;if (recv_post_data(req, buf) != ESP_OK) {web_response_error(req, HTTPD_500);ESP_LOGE(TAG, "recv post data error");goto error_handle;return ESP_FAIL;}str_len = httpd_find_arg(buf, "loginuser", (char *)user, sizeof(user), false);if ((str_len == -1) || (strlen((char *)user) == 0)) {ESP_LOGE(TAG, "user is abnormal");goto error_handle;} else {if (web_str_check(user, web_user_name) != true) {ESP_LOGE(TAG, "user_name is wrong");goto error_handle;}}str_len = httpd_find_arg(buf, "loginpwd", (char *)password, sizeof(password), false);if ((str_len == -1) || (strlen((char *)password) == 0)) {ESP_LOGE(TAG, "loginpwd is abnormal");goto error_handle;} else {if (web_str_check(password, web_pwd) != true) {ESP_LOGE(TAG, "loginpwd is wrong");goto error_handle;}}web_response_OK(req);return ESP_OK;
error_handle:web_response_error(req, HTTPD_400);return ESP_FAIL;
}

默认帐号、密码是:

static char web_user_name[USER_NAME_MAX_LEN] = "laowang";
static char web_pwd[PASSWORD_MAX_LEN] = "esp32";

示例效果

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

点击右上脚的“退出”按钮,可以退出该网页:

在这里插入图片描述

讨论

总结

1)本节主要是介绍在 ESP32 Web 上部署登录、登出功能的网页,通过登录机制,可以控制访问 ESP32 Web 的权限。

资源链接

1)ESP32-Web-Server ESP-IDF系列博客介绍
2)对应示例的 code 链接 (点击直达代码仓库)

3)下一篇:

(码字不易感谢点赞或收藏)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/238489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手敲单链表,简单了解其运行逻辑

1. 链表 1.1 结构组成 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 链表的结构如下图所示&#xff0c;是由很多个节点相互通过引用来连接而成的&#xff1b;每一个节点由两部分组成&#xff0c;分别数据域&…

文字识别(OCR)专题——基于NCNN轻量级PaddleOCRv4模型C++推理

前言 PaddleOCR 提供了基于深度学习的文本检测、识别和方向检测等功能。其主要推荐的 PP-OCR 算法在国内外的企业开发者中得到广泛应用。在短短的几年时间里&#xff0c;PP-OCR 的累计 Star 数已经超过了32.2k&#xff0c;常常出现在 GitHub Trending 和 Paperswithcode 的日榜…

GPT市场将取代插件商店 openAI已经关闭plugins申请,全部集成到GPTs(Actions)来连接现实世界,可以与物理世界互动了。

Actions使用了plugins的许多核心思想&#xff0c;也增加了新的特性。 ChatGPT的"Actions"与"Plugins"是OpenAI在GPT模型中引入的两种不同的功能扩展机制。这两种机制的目的是增强模型的功能&#xff0c;使其能够处理更多样化的任务和请求。下面是对两者的比…

SpringBoot 集成 ChatGPT,实战附源码

1 前言 在本文中&#xff0c;我们将探索在 Spring Boot 应用程序中调用 OpenAI ChatGPT API 的过程。我们的目标是开发一个 Spring Boot 应用程序&#xff0c;能够利用 OpenAI ChatGPT API 生成对给定提示的响应。 您可能熟悉 ChatGPT 中的术语“提示”。在 ChatGPT 或类似语…

股票要怎么买入卖出?

股票账户终于开好了&#xff01;恭喜你马上就可以开启刺激的炒股之旅了&#xff01;不过第一次买股票的你是不是还不知道怎么个买法呢&#xff1f;别担心~贴心的汇小鲸带着教程来了&#xff0c;咱们一起看看吧&#xff01; 首先一点&#xff0c;大家得知道&#xff1a;开好户还…

【开源】基于Vue和SpringBoot的快递管理系统

项目编号&#xff1a; S 007 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S007&#xff0c;文末获取源码。} 项目编号&#xff1a;S007&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快…

vscode如何在没有网络的情况下安装插件

vscode如何在没有网络的情况下安装插件 start 遇到没有网络的电脑&#xff0c;无法直接从插件市场安装vscode的插件。写一下 vscode 插件离线安装的方法. 解决方案 目标电脑没有可以安装插件的网络&#xff0c;那我们只能在有网络的环境下载好我们的插件。然后拷贝软件到无…

16、什么是损失函数

上一节介绍了训练的过程,一个模型在训练的过程中,每一轮训练数据计算到到最后一层时,都会输出本轮的预测值,那么如何将本轮的预测值与标签中的真实值进行对比呢? 这就要用到损失函数(Loss function)。 什么是损失函数 损失函数是用来衡量模型预测结果与真实标签(grou…

基于Intel Ai Analytics Toolkit 及边缘计算的溶氧预测水产养殖监测方案

基于AI的淡水养殖水质溯源、优化系统方案 前言一、关键需求及方案概述二、方案设计预测机制LSTM 模型基于intel AI 的时序水质分析模型与分类模型优化 三、实战分析1、方案简述2、数据分析预处理特征类型处理特征分布分析 3、特征构造4、特征选择过滤法重要性排序 5.构建LSTM模…

逆变器、转换器、DCDC、继电器等器件的原理和作用

一、逆变器 1&#xff09;作用 逆变器是一种将直流电转换为交流电的器件。 2&#xff09;逆变器的原理 a&#xff09;首先当蓝色开关闭合&#xff0c;红色开关断开时&#xff0c;电流流过负载的方向刚好是相反的 b&#xff09;当控制一定的频率控制蓝色开关和红色开关的打开和…

熬夜会秃头——beta冲刺Day2

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day2团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、团队成员会议总结 1、成员…

Nacos 架构原理

基本架构及概念​ 服务 (Service)​ 服务是指一个或一组软件功能&#xff08;例如特定信息的检索或一组操作的执行&#xff09;&#xff0c;其目的是不同的客户端可以为不同的目的重用&#xff08;例如通过跨进程的网络调用&#xff09;。Nacos 支持主流的服务生态&#xff0c…