随着 Web 应用程序的不断发展,用户认证成为了每个现代 Web 应用程序的必需组件之一。Passport.js 是 Node.js 最受欢迎的身份认证中间件之一。Fastify 是一个快速和低开销的 Web 框架。在本文中,我们将学习如何在 Fastify 中使用 Passport.js 实现用户认证。
步骤 1:安装 Passport.js 和相关策略
我们首先需要安装 Passport.js 和您选择的策略。例如,如果您要使用本地策略,则需要安装 “passport-local”:
--- ------- -------- --------------
安装其他策略的方式类似。
步骤 2:配置 Passport.js
在 Fastify 中配置 Passport.js 只需要几行代码。在您的 Fastify 应用程序的主文件中,添加以下代码:
----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- ------ - ------------------ ---------------- ------------------- ---------- --------- ----- -- - --- - -- --------- ----- ---- - ----- -------------- --------- -------- --- -- ------- - ------ ---------- ------- - -- ---- ----- ------- - ----- ------------------------ --------------- -- ---------- - ------ ---------- ------- - ------ ---------- ------ - ----- ----- - ------ ---------- - ---- ----------------------------- ----- -- - ---------- --------- --- ------------------------------ ---- ----- -- - --- - ----- ---- - ----- ------------------ ------ ---------- ------ - ----- ----- - ------ ---------- - ---
上面的代码基于本地策略,使用了 bcrypt 进行密码哈希。如果您要使用其他策略或哈希库,请进行相应更改。
步骤 3:初始化 Passport.js
在 Fastify 应用程序的主文件中添加以下代码:
----- --- - ---------- ---------------------------------------- ------------------------------- ----------------------------
上面的代码初始化了 Passport.js 并添加了 cookie 支持。请确保在使用 Passport.js 之前调用这些代码。
步骤 4:实现用户认证
在 Fastify 应用程序的主文件中添加以下路由处理程序:
------------------ ------------------------------- ----- ---- -- - ---------- ----- -------- --- --- ------------------ ----- ---- -- - ------------- ---------- -------- ------ --- --- ------------------- ----- ---- -- - -- ----------------------- - ---------- ----- -------- --- - ---- - ---------- -------- ------- --- - ---
上面的代码提供了登录、注销和获取用户信息的路由。登录路由使用“passport.authenticate”中间件进行身份验证,该中间件使用您配置的策略。注销路由删除了会话数据,并最终显示成功的注销消息。获取用户信息的路由使用了“req.isAuthenticated()”方法,该方法将返回“true”如果用户经过身份验证,则返回为“false”。
示例代码
以下是完整的示例代码,包括使用 Fastify 和 MongoDB 的用户模型和路由处理程序。运行此代码需要安装“fastify”、“fastify-cookie”、“mongoose”、“passport”和“passport-local”:
----- ------- - -------------------- ------- ---- --- ----- -------- - -------------------- ----- ------ - ------------------ ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- ---- - ---------------------- --- ----------------- --------- - ----- ------- ------- ---- -- --------- ------ ---- ---------------- ------------------- ---------- --------- ----- -- - --- - ----- ---- - ----- -------------- --------- -------- --- -- ------- - ------ ---------- ------- - ----- ------- - ----- ------------------------ --------------- ------------ - ------ ---------- ------- - ------ ---------- ------ - ----- ----- - ------ ---------- - ---- ----------------------------- ----- -- - ---------- --------- --- ------------------------------ ---- ----- -- - --- - ----- ---- - ----- ------------------ ------ ---------- ------ - ----- ----- - ------ ---------- - --- -------------------------------------------- ----------------------------------- -------------------------------- ----------------------- ----- ----- ---- -- - ----- - --------- -------- - - --------- -- ---------- -- ---------- - ------ ---------------------- -------- -------- --- - --- - ----- ------------ - ----- -------------- -------- --- -- -------------- - ------ ---------------------- -------- -------- --- - ----- -------------- - ----- --------------------- ---- ----- ---- - --- ------ --------- --------- -------------- --- ----- ------------ ------ ---------- -------- ------ --- - ----- ----- - ------ ---------------------- -------- --------- --- - --- ---------------------- ------------------------------- ----- ---- -- - ---------- ----- -------- --- --- ---------------------- ----- ---- -- - ------------- ---------- -------- ------ --- --- ----------------------- ----- ---- -- - -- ----------------------- - ---------- ----- -------- --- - ---- - ---------- -------- ------- --- - --- --------------------------------------------- - ---------------- ---- -- -------- -- -------------------- ----------- ---------- -- ------------------------
结论
在本文中,我们学习了如何使用 Passport.js 在 Fastify 中实现用户认证。我们了解了如何配置 Passport.js 和如何使用策略进行身份验证。我们还提供了一个完整的示例,该示例可帮助您开始创建您自己的认证系统。
Passport.js 是一个非常灵活和强大的身份验证中间件。通过了解如何将其与 Fastify 集成,您可以快速创建一个安全和强大的用户认证系统。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6720b5aa2e7021665e039a60