如何使用mongoose-auth / everyauth拒绝用户登录

3
使用node.js / expressjs / mongoose / mongoose-auth / everyauth。所有版本均为最新版本。
我正在尝试使用数据库表格来在开发期间按电子邮件地址列入白名单,但我希望主要的认证方法是Facebook。我想让mongoose-auth只在alpha_whitelist中找到Facebook电子邮件时才创建账户。这可以按预期为在表格中的地址创建账户,但如果用户不在白名单中,它会超时并使服务器崩溃。
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;
    }

看起来无论我放什么,它都会失败并导致服务器崩溃。显然我遗漏了某些东西。任何帮助将不胜感激。

2个回答

1

我还没有测试过这个,但我相信你只需要像其他代码块一样返回Promise就可以了

else {
    console.log('Denied');
    return promise.fail('Denied');
}

是的,你说得对。我曾经尝试过,但没有完全意识到发生了什么。看起来我需要使用everyauth的moduleErrorback方法来捕获错误。这是一个有用的链接:https://github.com/bnoguchi/everyauth/issues/36。感谢你的帮助。 - jhoff

0
我没有使用过everyauth,但我猜你正在寻找validateRegistration函数,如果你在那里放置你的白名单代码:
.validateRegistration(function (newUser) {
    db.checkWhiteList(function (success) {
        return null; // everything OK
    },
    function (err) {
        return [ "Not on whitelist" ];
    }
});

这个GitHub页面上有一个简短的描述。


我认为validateRegistration函数仅适用于密码模块,而不适用于Facebook。它提供了一种替代方法,即任何登录的用户都会创建一个帐户,然后我会根据每个请求检查白名单并相应地进行路由。 - jhoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接