Node.js 中的用户认证:使用 Cookie 与 Session

阅读时长 8 分钟读完

在前端开发中,用户认证是一个非常基础和重要的功能。在 Node.js 中,使用 Cookie 和 Session 进行用户认证是非常常见和方便的方法。本文将详细介绍 Cookie 和 Session 的概念、用法以及如何在 Node.js 中使用它们进行用户认证。

Cookie 与 Session 的概念

Cookie

Cookie 是一种存储在客户端的简单的文本文件,它通常用于跟踪用户的会话信息。当用户访问网站时,服务器可以在响应头中设置 Cookie,这样客户端就可以存储这个 Cookie,并在未来的请求中发送给服务器。这个过程可以让服务器在用户多次访问同一网站时,能够识别出这个用户。

Session

Session 是服务器用来存储用户信息的一种机制。当用户首次访问网站时,服务器可以为该用户创建一个新的 Session,并为其分配一个唯一的 Session ID。服务器在响应头中设置这个 Session ID,并在用户未来的请求中进行验证和识别。Session 信息可能包含用户的登录状态、购物车信息等。

Cookie 和 Session 的差异

尽管 Cookie 和 Session 都能用于存储用户信息,但它们的工作方式有所不同。具体来说:

  • Cookie 存储在客户端,Session 存储在服务器端。
  • Cookie 可以持久化存储,即设置过期时间,而 Session 通常在用户关闭浏览器或 Session 过期时停止。
  • Cookie 的数据传输相对不安全,因为客户端能够查看和修改 Cookie。而 Session 由于存储在服务器上,相对更加安全。

在 Node.js 中使用 Cookie 进行用户认证

下面是一个带有用户认证功能的 Node.js 示例代码,使用 Cookie 进行用户认证。

前端页面

(1)登录页面

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

(2)已登录页面

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

后端代码

(1)引入依赖

(2)设置登录和验证请求

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

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

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

(3)设置登出请求

这段代码中,我们使用 cookie-parser 中间件解析 Cookie,并使用 body-parser 中间件解析 POST 请求。当用户登录成功后,服务器会在响应中设置一个名为 “user_id” 的 Cookie,存储用户的 ID。当用户访问首页时,服务器会读取这个 Cookie,并验证用户信息。如果用户未登录,则重定向到登录页面。

当用户点击登出时,服务器会删除相应的 Cookie,并重定向到登录页面。

在 Node.js 中使用 Session 进行用户认证

在 Node.js 中使用 Session 进行用户认证的基本流程与使用 Cookie 类似。不同的是,我们需要在服务器端创建并管理 Session,并使用某种方法将 Session ID 与用户相关联。

下面是一个使用基于 express-session 的中间件实现用户认证的示例代码。

引入依赖

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

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

这里使用的是 express-session 中间件实现 Session 功能,其中:

  • secret 用于加密生成的 Session ID。
  • resave 表示是否在每次请求时都重新保存 Session。
  • saveUninitialized 表示是否自动保存未初始化的 Session。

设置登录和验证请求

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

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

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

这段代码与上一个示例类似,在用户登录成功后创建了一个名为 “user_id” 的 Session,并在 Web 应用程序中保存了该 Session ID。当用户访问首页时,服务器可以通过这个 Session ID 验证用户信息,并相应地构建页面。

设置登出请求

session.destroy() 方法用于删除当前 Session,并在回调函数中执行跳转操作。需要注意的是,执行 Session 销毁时,我们需要传递参数为回调函数,以确保 Session 销毁完成后才能回调完成。

总结

通过本文的介绍,我们了解了 Node.js 中使用 Cookie 和 Session 实现用户认证的基础概念和流程。相比于 Cookie,Session 更加安全,但也需要更多的服务器资源来存储和管理。在实际应用中,我们可以根据需求灵活选择。希望本文能对大家学习 Node.js 和实现用户认证有所帮助。

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

纠错
反馈