1. Passport
Passport 是适用于 Node.js 身份验证中间件,与 Express 相兼容。
Passport 的唯一目的是验证请求,它通过一系列被称为 策略(strategies) 的可扩展插件进行验证。 Passport 不会安装路由或假定任何特定的数据库模式,这可以最大限度地提高灵活性,并允许开发人员进行应用程序级别的决策。 API 非常简单:您提供 Passport 请求进行身份验证,Passport 提供钩子来控制身份验证成功或失败时发生的情况。
1.1. 赞助
Passport 是由 Rollbar 荣耀赞助的。他们为开发人员提供实时的错误监控、警报和分析。您可以在 https://rollbar.com上免费试用 Rollbar。
1.2. 安装
$ npm install passport
1.3. 用法
策略
Passport 使用策略的概念来认证请求。策略的范围可以从验证用户名和密码凭证,使用 OAuth](http://oauth.net/) 进行委托身份验证(例如通过 Facebook 或 Twitter )或使用 OpenID 的联合身份验证。
在对请求进行身份验证之前,必须配置应用程序使用的策略(或策略s)。
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
这里有 300+ 的策略。找到你想要的: passportjs.org
会话
Passport 将保持持续登录会话。为了使持久性会话正常工作,经过身份验证的用户必须序列化到会话,并在进行后续请求时进行反序列化。
Passport 不会对您的用户记录存储方式施加任何限制。相反,你提供给 Passport 的函数需要实现必要的序列化和反序列化逻辑。在一个典型的应用程序中,这将像序列化用户 ID 一样简单,并在反序列化时通过 ID 查找用户。
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
中间件
要在 Express 或基于 Connect 的应用程序中使用 Passport,请使用所需的 passport.initialize()
中间件对其进行配置。 如果您的应用程序使用持久登录会话(建议但不是必需的),则还必须使用 passport.session()
中间件。
var app = express();
app.use(require('serve-static')(__dirname + '/../../public'));
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
验证请求
Passport 提供一个 authenticate()
函数,它被用作路由中间件来验证请求。
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/');
});
1.4. 策略
Passport 拥有一整套超过 300 种认证策略,包括社交网络、企业集成、API 服务等等。
1.5. 搜索所有策略
在 passportjs.org 可以进行 策略搜索。
下表列出了常用的策略:
策略 | 协议 | 开发者 |
---|---|---|
Local | HTML form | Jared Hanson |
OpenID | OpenID | Jared Hanson |
BrowserID | BrowserID | Jared Hanson |
OAuth 2.0 | Jared Hanson | |
OpenID | Jared Hanson | |
OAuth / OAuth 2.0 | Jared Hanson | |
OAuth | Jared Hanson | |
Azure Active Directory | OAuth 2.0 / OpenID / SAML | Azure |
1.6. 示例
- 对于一个完整的工作示例,请参考使用 passport-local 的示例。
- 本地策略: 参考下面的教程,通过 LocalStrategy (
passport-local
) 设置用户身份验证: - 社交身份验证: 请参阅下面的教程,以建立各种社交身份验证策略:
1.7. 相关模块
- Locomotive — 强大的 MVC web 框架
- OAuthorize —OAuth 服务提供者工具包
- OAuth2orize — OAuth 2.0 授权服务器工具箱
- connect-ensure-login — 确保登录会话的中间件
wiki 上的 modules 页面列出了其他有用的模块,这些模块可以构建或集成到 Passport 上。
1.8. 测试
$ npm install
$ make test
1.9. 关于作者
1.10. 支持
这个项目得到了 Auth0 的支持。
1.11. License
Copyright (c) 2011-2015 Jared Hanson [http://jaredhanson.net/](http://jaredhanson.net/)