在 Express.js 中使用 Passport 进行用户身份验证

阅读时长 9 分钟读完

前言

在目前这个时代,Web 应用的安全性越来越重要。对于有些网站或应用来说,用户身份验证是必不可少的。Passport 是一个非常流行的 Node.js 中间件,可以方便地处理用户认证和授权的问题。在本篇文章中,我将详细介绍如何在 Express.js 中使用 Passport 进行用户身份验证。

安装和配置 Passport

首先,我们需要安装 Passport 和一些相关的策略。在控制台中输入以下命令:

这些包使我们能够使用 Passport、本地策略和会话来进行身份验证。在应用程序中,我们需要引入这些模块。

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

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

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

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

------------------------------
---------------------------
展开代码

app.js 文件中,我们引入所需的模块和策略。我们使用 express-session 模块来存储用户的会话信息,因为这个会话会持续到用户退出应用程序。Passport 需要依赖于会话来实现它的功能。初始化 passport 包和 passport.session() 插件,以便可以使用它们来验证请求。这里我们将本地策略作为示例,您可以选择其他策略,例如 Twitter 或 Facebook 策略。

创建本地策略

现在,我们需要创建一个本地策略来验证用户的凭据。我们需要调用 passport.use() 功能并定义本地策略。这个函数需要一个用户验证的回调函数,并从该函数返回一个用户对象。

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

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

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

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

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

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

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

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

-------------- - -------------
展开代码

这里我们假设我们的数据库中有一个用户对象数组。在 findUser 函数中,我们使用 find 功能来查找具有给定用户名的用户。如果找不到,则返回错误。本地策略会在验证用户时调用 localStrategy 函数,该函数进行一些简单的检查并返回用户对象,如果用户不存在或密码不正确,则返回 false。

应用程序中使用本地策略

要在 Express.js 中使用 Passport,我们需要实现两个必填的路由函数:一个用于用户登陆,另一个用于验证用户身份。

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

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

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

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

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

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

------------------ ------------------------------ -
  ---------------- ----
  ---------------- ---------
  ------------- ----
---
展开代码

passport.uselocalStrategy 绑定到 Passport 上下文中,以便可以使用它来验证用户。要记住用户登录会话,我们还需要使用 serializeUserdeserializeUser 函数。serializeUser 用于将用户实例序列化为字符串 ID 并通过回调存储在会话中。deserializeUser 函数使用该 ID 来从数据库中检索用户 instance。最后,我们定义了 GETPOST 路由,使用 Passport.authenticate 函数处理用户身份验证。身份验证成功时,请求被重定向到 /,否则被重定向到 /login

结论

在本文中,我们详细介绍了如何在 Express.js 中使用 Passport 进行用户身份验证。我们通过在应用程序中实现必填的路由函数 GET /loginPOST /login,实现了用户登录和验证用户身份。Passport 使得整个过程变得简单且易于理解,这是一个非常优秀的身份验证和授权中间件。

请看下面的完整代码示例:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------------- -- -- -
  ------------------- ------- -- -----------------------
--
展开代码
-- -------------------- ---- -------
---- --------------- ---
--------------

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

----- --------------- --------------
  -----
    -----------------------
    ------ ----------- --------------- --
  ------
  -----
    -----------------------
    ------ --------------- --------------- --
  ------
  ------- ----------------------------
-------
展开代码

附:GitHub 示例项目

在 GitHub 上,您可以找到本文介绍的示例项目:passport-local-example。该示例项目使用 Express.js 和 Passport,在本地使用用户名和密码进行身份验证。

参考链接

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

纠错
反馈

纠错反馈