如何在 Express.js 中实现基本身份验证

阅读时长 8 分钟读完

在 Web 应用程序中,身份验证是保护用户数据和敏感信息的重要组成部分。Express.js 是一个流行的 Node.js Web 框架,提供了许多身份验证的选项。本文将介绍如何在 Express.js 中实现基本身份验证,包括使用 Passport.js 和 JSON Web Token(JWT)。

什么是身份验证?

身份验证是确认用户身份的过程。在 Web 应用程序中,身份验证通常涉及用户提供用户名和密码。服务器验证这些凭据是否有效,并且如果有效,则允许用户访问受保护的资源。

使用 Passport.js 实现身份验证

Passport.js 是一个流行的 Node.js 身份验证中间件,可以轻松地与 Express.js 集成。它支持多种身份验证策略,包括本地策略(用户名和密码)、OAuth、OpenID 等。

安装 Passport.js

要使用 Passport.js,首先需要将其安装为项目的依赖项。打开终端并输入以下命令:

这将安装 Passport.js 和本地身份验证策略。

设置 Passport.js

在 Express.js 应用程序中设置 Passport.js 非常简单。只需在应用程序中引入 Passport.js 和本地策略,然后初始化 Passport.js。

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

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

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

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

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

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

这将设置 Passport.js 并配置本地策略。在本地策略中,我们验证用户名和密码,如果它们有效,则返回用户对象。在序列化和反序列化用户函数中,我们将用户对象转换为和从字符串转换为对象。

使用 Passport.js 进行身份验证

现在,我们已经设置了 Passport.js,可以使用它来验证用户凭据。要验证用户,可以使用 passport.authenticate 中间件。

此代码将使用本地策略验证用户凭据。如果验证失败,则用户将重定向到 /login。如果验证成功,则用户将重定向到 /

使用 JSON Web Token 实现身份验证

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在不同应用程序之间安全地传输信息。JWT 可以在客户端和服务器之间传递信息,并且可以用于实现身份验证。

安装 JWT

要使用 JWT,需要将其安装为项目的依赖项。打开终端并输入以下命令:

生成 JWT

要生成 JWT,可以使用 jsonwebtoken 模块。以下是生成 JWT 的示例代码:

此代码将生成一个包含 username 数据的 JWT,并使用 mysecret 密钥对其进行签名。要验证 JWT,需要使用相同的密钥。

验证 JWT

要验证 JWT,可以使用 jsonwebtoken 模块。以下是验证 JWT 的示例代码:

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

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

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

此代码将验证 JWT 并将其解码为 JavaScript 对象。如果验证失败,则将输出错误。如果验证成功,则将输出包含 username 数据的对象。

实现基本身份验证

要实现基本身份验证,可以结合使用 Passport.js 和 JWT。以下是实现基本身份验证的示例代码:

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

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

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

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

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

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

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

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

此代码将使用本地策略验证用户凭据,并生成 JWT。要访问受保护的路由,必须在请求标头中包含 JWT。在 verifyToken 函数中,我们验证 JWT 并将其解码为 JavaScript 对象。如果验证失败,则返回未授权的访问错误。

结论

在本文中,我们介绍了如何在 Express.js 中实现基本身份验证。我们使用了 Passport.js 和 JSON Web Token(JWT)来实现身份验证,并提供了示例代码。通过使用这些技术,可以确保 Web 应用程序的安全性,并保护用户数据和敏感信息。

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

纠错
反馈