在 web 应用程序中,身份验证是一个非常重要的部分,而且越来越多的人选择使用 Passport.js 来进行身份验证。Passport.js 是一个非常流行的 Node.js 身份验证框架,它支持超过 300 种不同的身份验证策略,如本地策略、OAuth、OpenID 等。
Hapi 是一个非常受欢迎的 Node.js 应用程序框架,它易于使用、非常强大,支持各种扩展和插件。这篇文章将介绍如何在 Hapi 应用程序中使用 Passport.js 进行身份验证。
安装 Passport.js
Passport.js 可以通过 npm 安装,使用以下命令:
npm install passport --save
配置 Passport.js
在 Hapi 应用程序中使用 Passport.js 身份验证,我们需要先在应用程序中注册 Passport.js 插件。可以使用以下代码将其添加到 server.js
文件中:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- -------- - -------------------- ----- ------ - ------------- ----- ----- ----- ----------- --- ----- -------- ------- - ----- --------------------------------------------- -------------------------------------------- ----- -- - ------------------------------- --------- - ------- - --------- ----------------------------------- --------- ----- -- ----------- --------- -------- ------- -- - ------ ----------------- --- ----- - --- -------------------------- --------------- ------------------- ------- --- --------------------- --- - --------
以上代码中配置了 hapi-auth-cookie
插件和 Passport
插件,默认启用的身份验证策略是 session,并且设置了 cookie 的密码和重定向的 URL。
我们需要为 Passport.js 设置一些策略,以便它能够与我们的应用程序一起工作。比如,我们可以使用以下代码添加本地策略:
-- -------------------- ---- ------- ---------------- -------------- ------------------ --------- ----- - -------------- --------- -------- -- -------- ----- ----- - -- ----- - ------ ---------- - -- ------- - ------ ---------- ------- - -- -------------------------------- - ------ ---------- ------- - ------ ---------- ------ --- - ---
这是一种非常常见的身份验证策略,它验证用户的用户名和密码。在上面的代码中,我们会去查找数据库中是否存在该用户,如果用户名或密码不正确,那么返回一个空对象。
使用 Passport.js 进行身份验证
当用户访问需要权限的页面时,我们需要对其进行身份验证,这时就可以使用 Passport.js 进行身份验证。以下代码是一个简单的路由定义,可以查看用户的个人资料:
-- -------------------- ---- ------- -------------- ------- ------ ---------------- ------- - ----- ---------- -------- -------- --------- -- - ----- ---- - ------------------------- ------ -------- ------------------- - - ---
在上面的代码中,我们设置了 auth: 'session'
,这意味着该路由需要进行身份验证。在处理程序的代码中,我们可以使用 request.auth.credentials
对象来获取用户的身份验证信息,然后显示该用户的用户名。
在 Passport.js 中,身份验证是通过中间件来实现的,以下代码是一个快速的示例,如何将 Passport.js 中间件添加到路由定义中:
-- -------------------- ---- ------- -------------- ------- ------- ----- --------- -------- -------- --------- -- - ------ ---------------- - --- -------------- ------- ------- ----- --------- -------- -------- --------- -- - ----- -------- - ------------------------- ----- -------- - ------------------------- ------------------------------ - ---------------- ----------- ---------------- -------- ----------- --- - --- -------------- ------- ------ ----- ---------- -------- -------- --------- -- - ----------------- ------ --------------------- - ---
在上面的代码中,我们定义了三个路由:登录、身份验证和注销。在 POST /login
上进行身份验证,使用 Passport.authenticate
中间件来验证用户凭据。如果用户成功登录,将重定向到 /profile
页面;如果登录失败,则将页面重定向到 /login
。
在 GET /logout
上,我们会主动退出用户并将其重定向到登录页面。
结论
在本文中,我们已经学习了如何在 Hapi 应用程序中使用 Passport.js 进行身份验证。我们首先需要配置 Passport.js 插件和策略,然后将其添加到需要进行身份验证的路由定义中。虽然使用 Passport.js 进行身份验证需要大量的额外正事,但是该框架的灵活性和可扩展性使其成为维护和扩展 Web 应用程序身份验证的强大工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f3fd31f40ec5a964e68178