如何在 Express.js 中使用 Session 实现用户验证

阅读时长 4 分钟读完

在开发 Web 应用程序时,实现用户身份认证是非常重要的。使用 Session 是一个常见的方案。本文将介绍使用 Express.js 和 Session 来实现用户验证的方法及其相关代码实现。

什么是 Session?

Session 是 Web 开发中常用的一种机制,用来记录用户访问 Web 应用程序的状态信息。一般情况下,Session 由服务器端创建,用来保存用户的登录信息等。

Session 的工作流程如下:

  1. 当用户发起请求时,服务器会在内存中为该用户创建一个 Session,并给该 Session 分配一个唯一的 ID。

  2. 服务器将该 Session ID 发送给客户端,并将其存储在客户端的 Cookie 中。

  3. 之后,客户端所有的请求都会自动带上该 Session ID。

  4. 当服务器接收到带有某个 Session ID 的请求时,便可通过该 ID 来匹配出相应的 Session 数据,然后进行处理。

在 Express.js 中使用 Session

下面是在 Express.js 中使用 Session 实现用户认证的方法。

1. 安装 Session 中间件

通过 NPM 安装 express-session 中间件,该中间件可以很方便的帮我们管理 Session。

2. 添加中间件

在 Express.js 应用中添加 express-session 中间件:

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

以上代码中的 secret 是用于对 Session ID 加密的密钥,resave 决定是否每次请求都重新存储 Session 数据,saveUninitialized 决定是否保存未初始化的 Session 数据,maxAge 决定 Cookie 的最大过期时间。

3. 添加登录功能

先将用户的信息保存在一个对象中:

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

然后添加一个 /login 路由:

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

以上代码中,首先从 URL 中获取用户输入的用户名和密码,然后在 users 数组中查找匹配的用户。如果找到,则将用户信息保存到 req.session.user 中;否则,返回登录失败信息。

4. 实现认证授权

在需要验证用户身份的路由中,可以通过检查 req.session.user 来判断用户是否已登录。

以上代码中,如果用户已登录,则返回欢迎信息;否则,重定向到登录页面。

5. 添加注销功能

注销功能很简单,只需销毁 req.session 即可:

总结

通过本文的介绍,我们了解到了如何使用 Session 实现用户验证。在实际开发中,除了使用 Session,还可以使用 JWT,OAuth2 和 OpenID Connect 等方案实现用户身份认证。

以上是本篇文章的全部内容及代码示例,希望本文能对大家在使用 Express.js 中实现用户验证提供指导意义,祝大家学习愉快!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ab67e148841e989473b31b

纠错
反馈