使用node.js/expressjs/mongoose/mongoose-auth/everyauth。所有版本都是最新的。
我试图在开发期间使用数据库表通过电子邮件地址将用户列入白名单,但我希望验证的主要方法是facebook。我希望有猫鼬认证只创建帐户,如果facebook的电子邮件是在alpha_whitelist发现。这将按照预期为表中的地址创建帐户,但如果用户不在白名单中,则会超时并导致服务器崩溃。
findOrCreateUser: function (sess, accessTok, accessTokExtra, fbUser) {
var promise = this.Promise(),
User = this.User()();
// TODO Check user in session or request helper first
// e.g., req.user or sess.auth.userId
User.findOne({'fb.id': fbUser.id}, function (err, foundUser) {
if(foundUser)
return promise.fulfill(foundUser);
alpha_whitelist.findOne(
{email: fbUser.email},
function(err,doc) {
if(doc) {
console.log("CREATING");
User.createWithFB(fbUser, accessTok, accessTokExtra.expires, function (err, createdUser) {
console.log(err,createdUser);
if (err) return promise.fail(err);
return promise.fulfill(createdUser);
});
} else {
console.log('Denied');
//not sure what to do here... i need to break the auth chain and redirect the user back to '/'
}
});
});
return promise;
}
似乎无论我在那里放什么,它都失败并使服务器崩溃。我显然漏掉了什么。
我还没有测试过这个,但我相信你只需要返回承诺,就像其他代码块一样
else {
console.log('Denied');
return promise.fail('Denied');
}
我没有使用everyauth,但我猜你正在寻找validateRegistration
函数,如果你把你的白名单代码在那里:
.validateRegistration(function (newUser) {
db.checkWhiteList(function (success) {
return null; // everything OK
},
function (err) {
return [ "Not on whitelist" ];
}
});
在GitHub页面上有一个简短的描述