前言
在目前这个时代,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.use
将 localStrategy
绑定到 Passport 上下文中,以便可以使用它来验证用户。要记住用户登录会话,我们还需要使用 serializeUser
和 deserializeUser
函数。serializeUser
用于将用户实例序列化为字符串 ID 并通过回调存储在会话中。deserializeUser
函数使用该 ID 来从数据库中检索用户 instance。最后,我们定义了 GET
和 POST
路由,使用 Passport.authenticate
函数处理用户身份验证。身份验证成功时,请求被重定向到 /
,否则被重定向到 /login
。
结论
在本文中,我们详细介绍了如何在 Express.js 中使用 Passport 进行用户身份验证。我们通过在应用程序中实现必填的路由函数 GET /login
和 POST /login
,实现了用户登录和验证用户身份。Passport 使得整个过程变得简单且易于理解,这是一个非常优秀的身份验证和授权中间件。
请看下面的完整代码示例:
-- ------ ----- ------- - ------------------ ----- -------- - ------------------- ----- ------- - -------------------------- ----- ------------- - ---------------------------------- ----- --- - --------- ---------------------------- --------- ---- --- ----------------- ------- --------- ------- ------ ------------------ ----- --- ----- ------------- - --------------------------- --------------------------- ----------------------------- ----- -- - ---------- -------------- -- ----------------------------------- ----- -- - ------------------ ----- ----- -- - --------- ----- -- -- ------------------------------ --------------------------- ------------- -------- ------ ---------------- ---------- ------------ ----- ---- -- - ------------------- - ----- -------- -- -- ----------------- ----- ---- -- - ------------------- - -------- ------------------ -- -- ------------------ ------------------------------ - ---------------- ---- ---------------- --------- ------------- ---- --- ------------------ ----- ---- -- - ------------ ----------------- -- ---------------- -- -- - ------------------- ------- -- ----------------------- --
---- --------------- --- -------------- -- -- --------- - -- -------- ------- -------- -- - -- ----- --------------- -------------- ----- ----------------------- ------ ----------- --------------- -- ------ ----- ----------------------- ------ --------------- --------------- -- ------ ------- ---------------------------- -------
---- --------------- --- ---------- --- ------------- ------- -- -------------------------
附:GitHub 示例项目
在 GitHub 上,您可以找到本文介绍的示例项目:passport-local-example。该示例项目使用 Express.js 和 Passport,在本地使用用户名和密码进行身份验证。
参考链接
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66efc8756fbf96019730db2b