[英]Using passport.js with yeoman and grunt for authentication
我正在尝试研究如何使用带有grunt / yeoman的passport.js。 我有以下内容:
// at the top of my gruntfile.js
var passport = require('passport');
var BasicStrategy = require('passport-http').BasicStrategy;
passport.use(new BasicStrategy(
function(username, password, done) {
return done(null, true); // I would expect this to always succeed, but still challenge for credentials
}
));
// further down in my connect config.
livereload: {
options: {
middleware: function (connect) {
return [
lrSnippet,
passport.initialize(),
passport.authenticate('basic', { session: false }),
mountFolder(connect, '.tmp'),
mountFolder(connect, yeomanConfig.app)
];
}
}
}
在每次请求时,响应都包含unauthorized
。 删除对passport.authenticate
的调用会使页面正常工作,但显然现在没有身份验证。 我已经尝试过改变中间件的顺序而且没有帮助,而且我无法与yeoman / grunt的专家接近,所以我不完全确定还有什么可以尝试...
任何帮助将不胜感激。
我在想你需要在BasicStrategy
回调BasicStrategy
一个对象传递给done()
。 我记得,护照JS使用这个对象来填充快递应用程序中的req.user,因此我认为它可能期望一个object
不是boolean
。
这是我在许多应用程序中使用的相同功能的更强大的示例:
passport.use(new BasicStrategy(
function(clientID, clientSecret, done) {
AuthClient.findOne({ clientID: clientID }, function(err, client) {
if (err) { return done(err); }
if (!client) { return done(null, false); }
if (client.secret != clientSecret) { return done(null, false); }
return done(null, client);
});
}
));
正如您所看到的,BasicStrategy用于分析客户端ID和clientSecret,它相当于您的用户名/密码组合。 因为你实际上并没有像我的例子中所示那样从数据库中提取它,我希望如果你只是按照上面的建议并将{}
传递给done(null, {})
,它可能会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.