Node.js 使用 passport 进行用户认证与授权

阅读时长 7 分钟读完

简介

在 Web 开发中,用户认证与授权是一项至关重要的任务。Node.js 作为一种流行的后端技术,提供了多种库和工具来实现用户认证与授权功能,其中最常用的就是 passport 库。passport 是 Node.js 中最受欢迎的认证和授权模块之一,它可以轻松集成到 Express、Koa 等 Web 框架中,并支持多种认证和授权策略(如 OAuth、JWT 等)。

本文将介绍如何使用 Node.js 和 passport 来实现基本的用户认证和授权功能。

安装

使用 passport 库之前,需要先安装 Node.js 和 passport 库。

在 Node.js 官网下载并安装 Node.js。在你的项目中安装 passport 库:

同时,你也需要安装一些 passport 的策略(如本文所用的 passport-local 策略):

配置

首先,要从 passport 模块导入 passport 和一些 passport 的策略。接下来,需要配置 passport 使用这些策略:

这里使用了 LocalStrategy 策略,该策略使用用户提供的用户名和密码进行认证。如果认证成功,将回调 done 函数并提供用户信息。

passport 验证用户并且认证成功时,会序列化用户 ID(也就是将用户 ID 存储到会话对象 req.session.passport.user 中)。在每个后续请求中,该用户 ID 将用于检索用户对象,并将其封装到 req.user 中。

你可以使用两个函数来实现将用户存储到会话中的逻辑,也可以将 passport 设置为从会话中或者数据库中检索用户。

具体的实现方式取决于你的项目需求,可以将用户 ID 存储在会话对象中,也可以将用户信息存储到数据库中。

认证和授权

一旦你配置了 passport,你就可以在你的应用程序中使用 passport.authenticate 函数来验证用户。passport.authenticate 本质上是一个中间件函数,可以在处理路由器访问之前对用户进行验证。

在上面的代码中,如果用户登录失败,他将会被重定向到 /login 页面;如果成功,他将会被重定向到主页。

在其他的路由器中,你可以通过检查 req.isAuthenticated() 方法来检查用户是否已被授权。

在上面的代码中,使用了 connect-ensure-login 库,该库提供了一个 ensureLoggedIn 中间件,用于确保用户已被授权,并进行用户访问限制。

示例代码

以下是一个使用 passport 库进行用户认证和授权的示例代码:

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

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

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

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

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

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

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

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

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

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

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

在这个示例代码中,我们创建了一个包含两个用户的数组,并使用 LocalStrategy 进行认证。我们还序列化和反序列化用户对象,并配置登录和限制访问的路由器。最后,开启服务器并在端口3000上运行。

结论

Node.js 中的 passport 库提供了一种方便的方式来实现用户认证和授权功能。在本文中,我们介绍了如何使用 passport 库进行基本的用户验证和授权,并提供了示例代码。你可以根据你的项目需求灵活使用 passport 库中的多种认证和授权策略。

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

纠错
反馈