Express.js 中如何使用 Passport 实现身份验证与授权

阅读时长 8 分钟读完

在 Web 应用程序中,身份验证和授权是必要的功能。Passport 是一个流行的 Node.js 身份验证中间件,它允许我们使用不同的策略进行身份验证和授权。本文将介绍如何在 Express.js 中使用 Passport 实现身份验证和授权。

安装 Passport

在开始使用 Passport 之前,需要先安装它。可以通过 npm 进行安装:

其中,passport 是 Passport 的核心库,passport-local 是本地身份验证策略。

配置 Passport

在使用 Passport 之前,需要先配置它。在 Express.js 中,需要在应用程序的入口文件中配置 Passport。首先,需要引入 Passport 和相关策略:

然后,需要配置 Passport。在配置中,需要设置序列化和反序列化用户对象的方法。序列化用户对象的方法会在用户登录成功后调用,用于将用户对象存储到 session 中。反序列化用户对象的方法会在用户访问需要授权的页面时调用,用于从 session 中获取用户对象。

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

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

接下来,需要配置本地身份验证策略。本地身份验证策略会验证用户的用户名和密码是否正确。

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

在上面的代码中,User 是一个 Mongoose 模型,用于操作用户对象。findOne() 方法会在数据库中查找用户名为 username 的用户对象。如果找到了用户对象,会调用 verifyPassword() 方法验证密码是否正确。如果密码正确,会将用户对象传递给 done 回调函数。

最后,需要将 Passport 配置到 Express.js 应用程序中:

创建登录和注册页面

在使用 Passport 实现身份验证和授权之前,需要先创建登录和注册页面。可以使用 HTML、CSS 和 JavaScript 创建这些页面。在登录页面中,用户需要输入用户名和密码。在注册页面中,用户需要输入用户名、密码和确认密码。

实现身份验证

在创建了登录页面之后,就可以使用 Passport 实现身份验证了。在 Express.js 中,可以使用 passport.authenticate() 方法进行身份验证。该方法会返回一个中间件,用于验证用户的身份。

在上面的代码中,passport.authenticate() 方法会使用本地身份验证策略进行身份验证。如果身份验证失败,会重定向到登录页面。如果身份验证成功,会重定向到主页。

实现授权

在实现身份验证之后,就可以使用 Passport 实现授权了。在 Express.js 中,可以使用 req.isAuthenticated() 方法判断用户是否已登录。如果用户已登录,可以使用 req.user 属性获取用户对象。

在上面的代码中,/profile 路由需要授权才能访问。如果用户已登录,会渲染 profile 模板并传递用户对象给模板。如果用户未登录,会重定向到登录页面。

示例代码

下面是一个完整的示例代码,用于演示如何在 Express.js 中使用 Passport 实现身份验证和授权。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

结论

Passport 是一个非常强大的身份验证中间件,它可以使用多种策略进行身份验证和授权。在 Express.js 中,可以很容易地使用 Passport 实现身份验证和授权。本文介绍了如何在 Express.js 中使用 Passport 实现身份验证和授权,并提供了示例代码。希望这篇文章对你有所帮助。

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

纠错
反馈