在前端开发类应用程序中,用户登录是必不可少的一环,能够为用户提供更好的使用体验。在 Express 应用程序中,Passport.js 是一种非常流行的用户认证中间件。它提供了 RESTful 身份验证服务以及 OAuth 认证通过 Facebook,Twitter 等社交媒体账户登录。在本文中,将会探讨使用 Passport.js 的最佳实践。
安装和配置 Passport.js
最开始,在您的 Express.js 应用程序中使用 Passport.js 之前,需要安装它。使用以下命令可以安装 Passport.js:
npm install passport passport-local passport-facebook --save
安装好 Passport.js 之后,需要在 Express.js 应用程序中引入它并配置它。例如,导入 Passport.js 和一个本地策略:
const passport = require('passport'); const LocalStrategy = require('passport-local');
你还需要创建一个 User 模型,这是一个代表了用户的 Mongoose 模型。
const mongoose = require('mongoose'); const User = mongoose.model('user');
接下来,可以配置一个本地认证策略。在这个策略中,可以使用 LocalStrategy 来实现身份验证工作。函数将尝试在数据库中查找输入的电子邮件和密码。如果找到了,它将执行它的回调函数,否则将抛出错误。
-- -------------------- ---- ------- ---------------- --------------- -------------- ------- -- ------- --------- ----- -- - -------------- ----- -- ---------- -- - -- ------- - ------ ---------- ------ - -------- -------- ----- -- ---------- --- - ---- - ------------------------------ ----- -------- -- - -- ----- ----- ---- -- --------- - ------ ---------- ------ - ---- - ------ ---------- ------ - -------- -------- ----- -- ---------- --- - --- - --- ----
这里,我们使用了 Passport.js 的 done 回调函数,表示在认证完成之后进行回调,done 接受如下三个参数:
- done(null, user):表示用户已经成功认证。
- done(null, false):表示没有找到对应的用户。
- done(err):表示在认证时出现了一个错误。
使用 Passport.js 进行身份验证
现在,为了在 Express.js 应用程序中实现身份验证,只需使用以下代码将在本地策略中实现的中间件添加到您的路由处理程序中:
-- -------------------- ---- ------- --------------------- -------- ----- ---- ----- - ------------------------------ -------- ----- ----- ----- - -- ----- - ------ ---------- - -- ------- - ------ ---------------------- -------- ------------ --- - --------------- -------- ----- - -- ----- - ------ ---------- - ------ --------------- --- ------- ---- ------ ---
在这个示例中,/login 端点将执行身份验证。如果身份验证成功,它将返回一个表示已验证用户的信息对象。
使用 Passport.js OAuth 认证
现代 Web 应用程序通常使用 OAuth 协议作为用户身份验证方法之一。Passport.js 也可以使用 OAuth 协议来通过 Facebook,Twitter 和其他社交媒体提供商认证。
Facebook OAuth 认证示例:
-- -------------------- ---- ------- ---------------- ------------------ --------- ---------------- ------------- -------------------- ------------ ---------------------------------------------- -- ------------- ------------- -------- ----- -- - ------------------- ----------- ---------- -- ----- ----- -- - -- ----- - ------ ---------- - ---------- ------ --- ----
Twitter OAuth 认证示例:
-- -------------------- ---- ------- ---------------- ----------------- ------------ --------------------- --------------- ------------------------ ------------ --------------------------------------------- -- --------------- ------------ -------- --- - ------------------- ---------- ---------- -- -------- ----- ----- - ------ ------- ------ --- - ---
在 Express.js 应用程序中,可以添加一个路由处理程序来实现 Facebook 或 Twitter OAuth 身份验证流程。
router.get('/auth/facebook', passport.authenticate('facebook')); router.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/login' }) );
在 Facebook 通过身份验证后,用户将会被重定向到 /auth/facebook/callback URL 上。Passport.js 会在这个 URL 上使用 'facebook' 策略来处理身份验证结果,并使用 successRedirect 或 failureRedirect 选项进行重定向。
结论
在本文中,我们了解了如何在 Express.js 中使用 Passport.js 进行用户身份验证。我们介绍了如何使用本地策略和 OAuth 认证来实现多种身份验证方法。这些实践可以帮助在开发中实现安全的身份验证体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6737f964317fbffedf0d798b