用户认证系统登录界面

下面是使用HTML和JavaScript实现的一个中文版登录界面,包含登录、注册和修改密码功能。注册成功后会显示提示信息,在登录成功后进入一个大大的欢迎页面。

1.代码展示

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户认证系统</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #f4f4f9;
        }
        .container {
            width: 300px;
            padding: 20px;
            background-color: white;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            border-radius: 5px;
            text-align: center;
        }
        h2 {
            margin-bottom: 20px;
        }
        form {
            display: flex;
            flex-direction: column;
        }
        input[type="text"],
        input[type="password"] {
            margin-bottom: 10px;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 5px;
            width: 100%;
        }
        button {
            padding: 10px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            width: 100%;
        }
        button:hover {
            background-color: #0056b3;
        }
        .message {
            margin-top: 10px;
        }
        .success {
            color: green;
        }
        .error {
            color: red;
        }
        #welcome-container {
            width: 400px;
            padding: 40px;
            background-color: #d4edda;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            border-radius: 10px;
            text-align: center;
        }
        #welcome-message {
            font-size: 24px;
            margin-bottom: 20px;
        }
    </style>
</head>
<body>
    <div class="container" id="login-container">
        <h2>登录</h2>
        <form id="login-form">
            <input type="text" id="login-username" placeholder="用户名" required>
            <input type="password" id="login-password" placeholder="密码" required>
            <button type="submit">登录</button>
        </form>
        <p class="message error" id="login-error"></p>
        <p class="message"><a href="#" onclick="showRegisterForm(); return false;">注册新账号</a></p>
    </div>

    <div class="container" id="register-container" style="display: none;">
        <h2>注册</h2>
        <form id="register-form">
            <input type="text" id="register-username" placeholder="用户名" required>
            <input type="password" id="register-password" placeholder="密码" required>
            <button type="submit">注册</button>
        </form>
        <p class="message success" id="register-success"></p>
        <p class="message error" id="register-error"></p>
        <p class="message"><a href="#" onclick="showLoginForm(); return false;">返回登录</a></p>
    </div>

    <div class="container" id="change-password-container" style="display: none;">
        <h2>修改密码</h2>
        <form id="change-password-form">
            <input type="password" id="old-password" placeholder="旧密码" required>
            <input type="password" id="new-password" placeholder="新密码" required>
            <button type="submit">修改密码</button>
        </form>
        <p class="message error" id="change-password-error"></p>
        <p class="message"><a href="#" onclick="showWelcomePage(); return false;">返回欢迎页面</a></p>
    </div>

    <div id="welcome-container" style="display: none;">
        <h2 id="welcome-message"></h2>
        <button onclick="showChangePassword()">修改密码</button>
        <button onclick="logout()">注销</button>
    </div>

    <script>
        let users = [];
        let currentUser = null;

        document.getElementById('login-form').addEventListener('submit', function(event) {
            event.preventDefault();
            const username = document.getElementById('login-username').value;
            const password = document.getElementById('login-password').value;
            const user = users.find(user => user.username === username && user.password === password);
            if (user) {
                currentUser = user;
                showWelcomePage();
            } else {
                document.getElementById('login-error').textContent = '无效的用户名或密码';
            }
        });

        document.getElementById('register-form').addEventListener('submit', function(event) {
            event.preventDefault();
            const username = document.getElementById('register-username').value;
            const password = document.getElementById('register-password').value;
            if (!users.find(user => user.username === username)) {
                users.push({ username, password });
                document.getElementById('register-success').textContent = '注册成功!';
                setTimeout(() => {
                    document.getElementById('register-success').textContent = '';
                }, 3000);
                document.getElementById('register-username').value = '';
                document.getElementById('register-password').value = '';
                showLoginForm();
            } else {
                document.getElementById('register-error').textContent = '用户名已存在';
            }
        });

        document.getElementById('change-password-form').addEventListener('submit', function(event) {
            event.preventDefault();
            const oldPassword = document.getElementById('old-password').value;
            const newPassword = document.getElementById('new-password').value;
            if (currentUser && currentUser.password === oldPassword) {
                currentUser.password = newPassword;
                users = users.map(user => 
                    user.username === currentUser.username ? { ...user, password: newPassword } : user
                );
                document.getElementById('change-password-error').textContent = '密码修改成功';
                setTimeout(() => {
                    document.getElementById('change-password-error').textContent = '';
                }, 3000);
                hideChangePassword();
            } else {
                document.getElementById('change-password-error').textContent = '旧密码不正确';
            }
        });

        function showWelcomePage() {
            document.getElementById('login-container').style.display = 'none';
            document.getElementById('register-container').style.display = 'none';
            document.getElementById('change-password-container').style.display = 'none';
            document.getElementById('welcome-container').style.display = 'block';
            document.getElementById('welcome-message').textContent = `欢迎, ${currentUser.username}`;
        }

        function logout() {
            currentUser = null;
            document.getElementById('welcome-container').style.display = 'none';
            document.getElementById('login-container').style.display = 'block';
        }

        function showRegisterForm() {
            document.getElementById('login-container').style.display = 'none';
            document.getElementById('register-container').style.display = 'block';
            document.getElementById('login-error').textContent = ''; // Clear login error message
        }

        function showLoginForm() {
            document.getElementById('register-container').style.display = 'none';
            document.getElementById('login-container').style.display = 'block';
            document.getElementById('register-success').textContent = ''; // Clear registration success message
            document.getElementById('register-error').textContent = ''; // Clear registration error message
        }

        function showChangePassword() {
            document.getElementById('welcome-container').style.display = 'none';
            document.getElementById('change-password-container').style.display = 'block';
        }

        function hideChangePassword() {
            document.getElementById('change-password-container').style.display = 'none';
            document.getElementById('welcome-container').style.display = 'block';
        }
    </script>
</body>
</html>




2.功能说明:

这个应用程序使用纯HTML和JavaScript实现。

  • 包含登录、注册和修改密码功能。
  • 注册成功后会显示一条绿色的成功消息,并在3秒后自动消失。
  • 登录成功后,用户会被带到一个大大的欢迎页面。
  • 用户可以点击“注销”按钮退出登录。
  • 提供了从登录页面跳转到注册页面和从注册页面返回登录页面的链接。
  • 欢迎页面中有一个“修改密码”的按钮,可以跳转到修改密码页面。

3.效果图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp中vuex(全局共享)的应用

一、Vuex概述 1.1 官方解释 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用集中式存储管理 应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化 - Vuex 也集成到 Vue 的官方调试工具 devtools extension&#xff0c;提供了诸…

不能通过 ip 直接访问 共享盘 解决方法

from base_config.config import OpenSMB, SMB import os, time, calendar, requests, decimal, platform, fs.smbfsinfo_dict SMB.EPDI_dict info_dict[host] (FS03,10.6.12.182) info_dict[direct_tcp] True# smb OpenSMB(info_dict)print(ok)# 根据 ip 查询电脑名 impor…

JavaEE初阶——多线程(线程安全-锁)

复习上节内容&#xff08;部分-掌握程度不够的&#xff09; 加锁&#xff0c;解决线程安全问题。 synchronized关键字&#xff0c;对锁对象进行加锁。 锁对象&#xff0c;可以是随便一个Object对象&#xff08;或者其子类的对象&#xff09;&#xff0c;需要关注的是&#xff…

day2 数据结构 结构体的应用

思维导图 小练习&#xff1a; 定义一个数组&#xff0c;用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息&#xff0c;删除后调用显示学…

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…

内网是如何访问到互联网(H3C源NAT)

H3C设备NAPT配置 直接打开29篇的拓扑&#xff0c;之前都配置好了 「模拟器、工具合集」复制整段内容 链接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1&#xff0c;下面的终端访问不了&#xff0c;需要做NAPT源…

生产者-消费者模型

目录 生产者-消费者模型介绍 生产者-消费者模型优点 生产者-消费者之间的关系 基于阻塞队列实现生产者-消费者模型 基于环形队列实现生产者-消费者模型 生产者-消费者模型介绍 ● 计算机中的生产者和消费者本质都是线程/进程 ● 生产者和消费者不直接通讯&#xff0c;而是…

.NET6 WebAPI从基础到进阶--朝夕教育

1、环境准备 1. Visual Studio 2022 2. .NET6 平台支持 3. Internet Information Services 服务器&#xff08; IIS &#xff09; 4. Linux 服务器 【 CentOS 系统】 ( 跨平台部署使用 ) 5. Linux 服务器下的 Docker 容器&#xff08; Docker 部署使用&#xff09; …

Linux系统中进程的概念 -- 冯诺依曼体系结构,操作系统,进程概念,查看进程,进程状态,僵尸进程,孤儿进程,进程优先级,进程切换,进程调度

目录 1. 冯诺依曼体系结构 2. 操作系统(Operator System) 2.1 操作系统的概念 2.2 设计操作系统(OS)的目的 2.3 系统调用和库函数概念 3. 进程 3.1 进程的基本概念与基本操作 3.1.1 进程的基本概念 3.1.2 PCB -- 描述进程 3.1.3 task_ struct 3.1.4 查看进程 3.1.5…

4.redis通用命令

文章目录 1.使用官网文档2.redis通用命令2.1set2.2get2.3.redis全局命令2.3.1 keys 2.4 exists2.5 del(delete)2.6 expire - (失效时间)2.7 ttl - 过期时间2.7.1 redis中key的过期策略2.7.2redis定时器的实现原理 2.8 type2.9 object 3.生产环境4.常用的数据结构4.1认识数据类型…

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

成人教育专升本-不能盲目选择

成人教育专升本都有哪些方法?在当今时代&#xff0c;学历往往是打开职业机会的敲门砖&#xff0c;成人教育专升本成为突破职业发展瓶颈的途径&#xff0c;然而&#xff0c;你是否清楚它们之间究竟有着怎样的区别呢? 一、成人教育专升本&#xff0c;成人高考 1、考试形式 成人…

repmgr集群部署-PostgreSQL高可用保证

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

【前端】 canvas画图

一、场景描述 利用js中的canvas画图来画图&#xff0c;爱心、动画。 二、问题拆解 第一个是&#xff1a;canvas画图相关知识。 第二个是&#xff1a;动画相关内容。 三、知识背景 3.1 canvas画图相关内容 canvas画图的基本步骤 获取页面上的canvas标签对象获取绘图上下文…

深度学习——激活函数、损失函数、优化器

深度学习——激活函数、损失函数、优化器 1、激活函数1.1、一些常见的激活函数1.1.1、sigmoid1.1.2、softmax1.1.3、tanh1.1.4、ReLU1.1.5、Leaky ReLU1.1.6、PReLU1.1.7、GeLU1.1.8、ELU 1.2、激活函数的特点1.2.1、非线性1.2.2、几乎处处可微1.2.3、计算简单1.2.4、非饱和性1…

硬件设计-电源轨噪声对时钟抖动的影响

目录 定义 实际案例 总结 定义 首先了解抖动的定义&#xff0c;在ITU-T G.701中有关抖动的定义如下&#xff1a; 数字信号重要瞬间相对于其理想时间位置的短期非累积变化。 抖动是时钟或数据信号时序的短期时域变化。抖动包括信号周期、频率、相位、占空比或其他一些定时特…

搭建自己的wiki知识库(重新整理)

写在前面&#xff1a; 之前写过一篇&#xff0c;因为这次修改的内容比较多&#xff0c;所以不想在原基础上修改了&#xff0c;还是重新整理一篇吧。搭建wiki知识库&#xff0c;可以使用在线文档&#xff0c;如xx笔记、xx文档、xx博客、git仓库&#xff08;如&#xff1a;GitHu…

数据可视化的Python实现

一、GDELT介绍 GDELT ( www.gdeltproject.org ) 每时每刻监控着每个国家的几乎每个角落的 100 多种语言的新闻媒体 -- 印刷的、广播的和web 形式的&#xff0c;识别人员、位置、组织、数量、主题、数据源、情绪、报价、图片和每秒都在推动全球社会的事件&#xff0c;GDELT 为全…

【Python基础】Python知识库更新中。。。。

1、Python知识库简介 现阶段主要源于个人对 Python 编程世界的强烈兴趣探索&#xff0c;在深入钻研 Python 核心语法、丰富库函数应用以及多样化编程范式的基础上&#xff0c;逐步向外拓展延伸&#xff0c;深度挖掘其在数据分析、人工智能、网络开发等多个前沿领域的应用潜力&…

SpringCloud微服务实战系列:02从nacos-client源码分析注册中心工作原理

目录 角色与功能 工作流程&#xff1a; nacos-client关键源码分析 总结&#xff1a; 角色与功能 服务提供者&#xff1a;在启动时&#xff0c;向注册中心注册自身服务&#xff0c;并向注册中心定期发送心跳汇报存活状态。 服务消费者&#xff1a;在启动时&#xff0c;把注…