前言
在 Web 应用中,用户的身份验证是一个必要的功能。使用 Passport 可以方便的实现多种身份验证方式,这种模块化的设计也方便使用者自定义和配置。
Hapi 是一个现代化的 Node.js Web 应用框架,它的插件化设计让使用 Passport 身份验证变得非常简单。
本文将介绍如何在 Hapi 中使用 Passport 进行身份验证,并提供详细的代码示例和指导意义。
安装与配置 Passport
在开始使用 Passport 进行身份验证之前,我们需要先安装 Passport 及相关的身份验证策略。在 Node.js 中使用 npm 进行安装:
npm install passport passport-local
其中,passport-local
是一个对本地账号密码进行身份验证的策略。还可以安装其他策略,如 passport-facebook
、passport-google-oauth
等。
安装完成后,需要在 Hapi 中注册 Passport 插件:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- ------ - ------------- ----- ----- ----- ----------- --- -------------------------------------------- ----- -- - -- ----- - ------------------- ----- ---- - ------------------------------- --------- - ------- - ----- ---------- --------- ------------------------------ --------- ----- -- ----------- --------- ----------- ----- ---- -- - -- - -- - ---- --- --- ----------------------------------------- ----- -- - -- ----- - ------------------- ----- ---- - -------------------------------- ----------- - --------- --- ------------------------ --------- ----- -- - -- ----------- -- ------- ---------- ------ -- ------- ---------- ------ - -------- -------- -------- -- --------- --- -- --- -------------------------------- ---
在上面的代码中,我们先使用 hapi-auth-cookie
插件注册一个 cookie 身份验证策略,并在 hapi-passport
插件中注册 passport
身份验证策略。
passport
身份验证策略使用了 passport-local
本地账号密码进行身份验证的策略。在本地验证策略中,我们需要实现一个验证函数,根据用户输入的账号密码进行验证,并调用 done
回调方法返回验证结果。
如果验证成功,调用 done(null, user)
方法,其中 user
是用户信息;如果验证失败,调用 done(null, false, { message: 'Invalid username or password' })
方法,其中第三个参数 message
是认证失败的原因。
配置路由
在实现了 Passport 身份验证策略之后,我们需要在 Hapi 应用中配置一个路由来处理用户的登录请求。在登录页面中,用户会输入用户名和密码,并将这些信息提交到后端进行认证。
-- -------------------- ---- ------- -------------- ------- ------- ----- --------- -------- --------- -- -- - ----- - --------- -------- - - ---------------- ------ ------------------------------- ------------------------- - --------- -------- -- -------- -- ---------------- -- - ----- - ---------------- ---- - - --------- -- ----------------- - ------------------------ ---- --- ------ ---------------- - ------ --------------- - -------- -------- -------- -- --------- --- -- ------------ -- - ------------------- ------ --------------- - -------- -------- ------ --- --- - ---
在上面的代码中,我们配置了一个 POST /login
路由,当用户提交登录表单时会访问这个路由。在路由处理函数中,首先获取用户提交的用户名和密码,然后调用 hapi-passport
的 authenticate
方法进行身份验证。
如果身份验证成功,将用户信息写入 cookie,然后重定向到首页;否则,显示登录页面并提示错误信息。
配置其它路由
在进行身份验证之后,我们可以配置一些需要身份认证的路由,在路由处理函数中可以通过 request.auth.credentials.user
访问用户信息。
-- -------------------- ---- ------- -------------- ------- ------ ----- ---- -------- - ----- --------- -- -------- --------- -- -- - ----- - ---- - - ------------------------- ------ --------------- - ---- --- - ---
在上面的代码中,我们配置了一个 GET /
路由,这个路由需要使用 session
身份验证策略验证用户身份。在路由处理函数中,我们获取用户信息,并通过视图返回首页。
示例代码
下面是一个完整的示例代码,包含了登录页面和首页的视图渲染代码:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- -------- - -------------------- ----- ------------- - ----------------------------------- ----- ------ - ------------- ----- ----- ----- ----------- --- -------------- -------- - ---- -------------- -- ----------- ---------- ----- ------- --- -------------------------------------------- ----- -- - -- ----- - ------------------- ----- ---- - ------------------------------- --------- - ------- - ----- ---------- --------- ------------------------------ --------- ----- -- ----------- --------- ----------- ----- ---- -- - -- - -- - ---- --- --- ----------------------------------------- ----- -- - -- ----- - ------------------- ----- ---- - -------------------------------- ----------- - --------- --- ------------------------ --------- ----- -- - -- ----------- -- ------- ---------- ------ -- ------- ---------- ------ - -------- -------- -------- -- --------- --- -- --- -------------------------------- --- -------------- ------- ------ ----- --------- -------- --------- -- -- - ------ ---------------- - --- -------------- ------- ------- ----- --------- -------- --------- -- -- - ----- - --------- -------- - - ---------------- ------ ------------------------------- ------------------------- - --------- -------- -- -------- -- ---------------- -- - ----- - ---------------- ---- - - --------- -- ----------------- - ------------------------ ---- --- ------ ---------------- - ------ --------------- - -------- -------- -------- -- --------- --- -- ------------ -- - ------------------- ------ --------------- - -------- -------- ------ --- --- - --- -------------- ------- ------ ----- ---- -------- - ----- --------- -- -------- --------- -- -- - ----- - ---- - - ------------------------- ------ --------------- - ---- --- - --- ------ -- -- - --- - ----- --------------- ------------------- ------- --- --------------------- - ----- ----- - ------------------- - -----
总结
在本文中,我们介绍了如何在 Hapi 应用中使用 Passport 进行身份验证。通过简单的配置和编写,我们可以使用多种身份验证策略,包括本地账号密码验证、社交账号验证等。
Passport 是非常流行的 Node.js 身份验证库,可以简化身份验证过程,并提供了丰富的身份验证策略。在实际开发中,我们可以根据实际需要选择相应的策略,并进行配置和使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6459b34a968c7c53b0bcd65b