使用 Express.js+EJS 实现用户注册和登录控制

在前端开发中,用户管理是一个重要的功能。在这个过程中,用户注册和登录控制是必不可少的部分。本文将介绍如何使用 Express.js+EJS 来实现用户注册和登录控制,并提供详细的代码示例,希望能对前端开发者有所帮助。

环境配置

在开始之前,我们需要先安装 Node.js 和 Express.js。如果您已经安装了 Node.js, 可以使用以下命令安装 Express.js:

--- ------- ------- ------

同时,我们还需要安装 EJS 模板引擎,可以使用以下命令安装:

--- ------- --- ------

项目结构

在开始编写代码之前,我们先来看一下项目的结构。本文中的项目结构如下所示:

--- ------------
--- ------
- --- ---
- --- --
- --- ------
- --- -----
--- -----
- --- ---------
- --- ---------
- --- ------------
- --- -------------
--- ------

其中,node_modules 是存放第三方包的目录,public 是存放静态资源的目录,css 存放样式文件,js 存放脚本文件,imagesfonts 分别存放图片和字体文件。views 是存放 EJS 模板文件的目录,index.ejs 是首页模板,login.ejs 是登录页面模板,register.ejs 是注册页面模板,dashboard.ejs 是用户登录后的页面模板。app.js 是应用的入口文件。

实现用户注册

现在我们开始从用户注册功能开始实现。我们需要首先定义路由来处理 GETPOST 请求。

--- ------- - -------------------
--- --- - ----------

-------------------- ------------- ---- -
    -----------------------
---

--------------------- ------------- ---- -
    --- -------- - ------------------
    --- -------- - ------------------

    -- ----- ------------

    -- ----- ------------

    -----------------------
---

上述代码中,我们定义了 /register 路由来处理 GET 和 POST 请求。GET 请求会渲染 register.ejs 模板,POST 请求则会将账号密码存储到数据库中,然后重定向到登录页面。

register.ejs 中,我们需要添加如下的表单来获取用户的账号和密码信息:

----- ------------- -------------------
    ------ ----------- --------------- ----------------- --
    ------ --------------- --------------- ---------------- --
    ------- -------------------------
-------

这里的表单通过 POST 请求将数据提交到 /register 路由中。我们使用 name 属性来命名输入框,以便使用 req.body 来获取到提交的数据。

在存储账号密码之前,我们需要先对其进行校验。比如,账号和密码不能为空,密码应该包含大写字母、小写字母、数字和特殊字符等等。如果检查未通过,我们应该返回错误信息,让用户重新填写表单。

实现用户登录

接下来,我们需要实现用户登录功能。和注册功能类似,我们也需要定义路由来处理 GETPOST 请求。

----------------- ------------- ---- -
    --------------------
---

------------------ ------------- ---- -
    --- -------- - ------------------
    --- -------- - ------------------

    -- ----- ----------

    ---------------------------
---

login.ejs 中,我们也需要添加相应的表单来获取用户的账号和密码信息:

----- ------------- ----------------
    ------ ----------- --------------- ----------------- --
    ------ --------------- --------------- ---------------- --
    ------- -------------------------
-------

这里的表单通过 POST 请求将数据提交到 /login 路由中,并且表单中的账号和密码输入框与注册表单中的一致。

在存储账号密码之前,我们需要先检查账号密码是否正确。如果正确,我们应该重定向到用户的个人中心页面;如果不正确,我们应该返回错误信息并让用户重新填写表单。

控制用户登录状态

无论是注册还是登录,如果用户已经登录,我们应该将其重定向到个人中心页面。为了控制用户的登录状态,我们可以使用中间件来检查用户的状态。

app.js 中添加如下中间件:

-- ---------
-------- ----------------- ---- ----- -
    -- ------------------ -
        -------
    - ---- -
        -----------------------
    -
-

-- -----
----------------------

该中间件用来检查用户是否已经登录。如果已登录,则继续执行后续代码;如果未登录,则将用户重定向到登录页面。

这里涉及到了 express-session 模块,需要先安装:

--- ------- --------------- ------

app.js 中添加如下代码:

--- ------- - ---------------------------

-----------------
    ------- --------- -----
    ------- ------
    ------------------ ----
----

这里的 secret 用来加密 session,resavesaveUninitialized 则是 session 相关的配置选项,具体用法可以查看官方文档。

实现个人中心页面

最后,我们需要实现用户登录后的个人中心页面。这个页面需要展示用户的个人信息,比如账号、密码、邮箱、手机号码等等。

--------------------- ------------- ---- -
    --- ---- - -----------------

    -- ----- ---------

    ----------------------- ------ ----- ----- -------
---

上述代码中,我们定义了 /dashboard 路由来处理 GET 请求。该路由会从 session 中获取用户信息,然后从数据库中获取用户的个人信息并渲染到 dashboard.ejs 模板中。

dashboard.ejs 中添加如下代码:

------- ------------- -------
-------------------------- ---------- ------
---------------------------- ---------- ------

上述代码中,我们展示了用户的账号信息,以及从数据库中获取到的个人信息。

总结

本文介绍了如何使用 Express.js+EJS 来实现用户注册和登录控制,包括路由的定义、校验账号密码、检查用户状态、获取用户的个人信息等等。希望本文对前端开发的初学者有所帮助。完整代码可以在我的 GitHub 上查看:https://github.com/Jane0522/nodejs-express-user-authentication。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6469de9b968c7c53b09a8bd1


猜你喜欢

  • CSS Grid 中如何实现响应式图片缩放

    CSS Grid 中如何实现响应式图片缩放 随着移动设备的发展和用户行为的转变,响应式设计已经成为了现代 web 开发的必备要素。而作为一种全新的 CSS 布局方式,CSS Grid 也可以为响应式图...

    1 年前
  • # TypeScript 中的接口

    TypeScript 中的接口 在 TypeScript 中,接口是一个非常有用的概念。接口描述了对象的结构,并且可以用于定义函数类型、类类型等。本文将为您介绍 TypeScript 中的接口的基本概...

    1 年前
  • Redis 主从复制机制详解

    简介 Redis 是一个高性能的 key-value 数据库,常用于缓存、消息队列、计数器等场景。Redis 支持主从复制机制,可以复制一份主库的数据到多个从库,从而提高数据的可用性、容错性和读性能。

    1 年前
  • 如何使用 Oracle 进行 SQL 性能优化

    Oracle 是世界上最流行的数据库之一,然而性能问题一直是数据库中最棘手的问题之一。本文将为你介绍如何使用 Oracle 进行 SQL 性能优化,通过针对 SQL 语句的优化和索引的建立来解决性能问...

    1 年前
  • Docker-Compose 配置详解

    Docker-Compose 是 Docker 官方推出的一个多容器集成工具,它通过 YAML 文件定义多个服务和容器,一键启动和管理整个应用程序。在前端开发中,Docker-Compose 可以用来...

    1 年前
  • 基于 Hapi.js 的企业级 RESTful API 实战开发经验分享

    前言 Hapi.js 是一个现代化的 Node.js Web 框架,它极其强大且易于使用,能够满足企业级应用程序的需求。本文将分享基于 Hapi.js 的企业级 RESTful API 实战开发经验,...

    1 年前
  • 使用 Deno 构建服务器端 API

    Deno 是一个基于 Rust 编写的 JavaScript/TypeScript 运行时,它的目标是提供一个安全稳定、易于维护的应用开发平台。Deno 的出现与 Node.js 的异步编程模型类似,...

    1 年前
  • 如何解决使用 Material Design 组件时的性能问题

    如何解决使用 Material Design 组件时的性能问题 前言 Material Design 是 Google 推出的一种设计语言,旨在为用户提供一致、美观的界面和交互。

    1 年前
  • Serverless 如何部署调试工具

    简介 Serverless 是一个快速、灵活且经济实惠的云计算技术,已经被广泛使用于 Web 应用开发之中。在 Serverless 中,我们可以使用 AWS Lambda、Azure Functio...

    1 年前
  • ESLint 代码自动化审查工具详解

    在现代前端开发中,为了确保代码的质量和一致性,我们需要使用一些代码审查工具来帮助我们检查潜在的错误和代码规范。ESLint 是一个流行的自动化代码审查工具,能够帮助我们自动检测代码中的一些问题。

    1 年前
  • 详解 Headless CMS 中关于 API 的基础知识

    前言 Headless CMS 是一种新兴的 CMS 架构,它之所以被称为 Headless,是因为它摒弃了传统 CMS 的 monolithic 架构,把内容与表现分离开来。

    1 年前
  • ES6 中 Set 和 Map 的使用及其优化

    ES6 中 Set 和 Map 的使用及其优化 前言 过去在 JS 开发中,常常需要使用数组和对象来实现数据的存储和查找,但是随着业务的发展,这种方式逐渐暴露出许多性能问题,因此 ES6 在标准 AP...

    1 年前
  • 用 SASS 实现多屏幕自适应的方法

    前言 在 Web 开发中,我们经常需要考虑用户使用的设备屏幕大小不同的情况,因此需要实现多屏幕自适应布局。本文将介绍如何使用 SASS 实现多屏幕自适应布局。 SASS 简介 SASS 是一种 CSS...

    1 年前
  • # 处理 Chai 断言失败导致的程序崩溃问题

    处理 Chai 断言失败导致的程序崩溃问题 在前端开发中,你肯定用过常见的测试框架 Mocha 和 Chai,它们为开发者提供了各种丰富的测试功能,帮助开发者更好地进行单元测试、集成测试等。

    1 年前
  • Promise 的并行与串行执行方法详解

    在前端开发中,我们经常会使用异步操作,而 Promise 是 ES6 中专门为异步操作而设计的一种语法结构。而 Promise 的并行与串行执行方法也是我们在前端开发中经常需要用到的技巧。

    1 年前
  • 在 ES9 中使用 Rest 和 Spread 语法操作数组和对象

    JavaScript 是一种强大的编程语言,可以用于开发 Web 应用和移动应用。ES6 和 ES7 人们已经熟悉了 Rest 和 Spread 通用的数组操作语法,ES9 提供了更进一步的支持,下面...

    1 年前
  • 常见的 Mocha 测试错误及其解决方案

    概述 Mocha 是一款流行的 JavaScript 测试框架,它可以用于编写单元测试、集成测试以及端到端测试。然而,测试总是会出现错误,而当我们没有理解和处理这些错误时,我们的测试代码就会变得不可靠...

    1 年前
  • Socket.IO 如何处理多个命名空间

    Socket.IO 是一个为浏览器和服务器之间实时通信提供的 JavaScript 库。它提供的消息传递机制和事件机制使得在应用中实现实时通信非常方便。 在 Socket.IO 中,命名空间(name...

    1 年前
  • Vue.js 的 Vue Router 入门指南

    前言 随着单页应用的兴起,前端路由也得到了更多的关注和使用。Vue.js 作为目前最为流行的前端框架之一,其路由模块 Vue Router 也越来越成熟和易用。本文将为大家介绍 Vue Router ...

    1 年前
  • 如何在 React 项目中使用 LESS 样式

    LESS 是一种 CSS 预处理器,它能够让我们使用变量、混合(mixins)、函数等方式来编写 CSS。它能够极大地提高 CSS 的可维护性、可读性以及易于扩展性。

    1 年前

相关推荐

    暂无文章