2011-12-01 51 views
3

。所有版本都是最新的。我該如何拒絕用戶使用mongoose-auth/everyauth登錄使用node.js/expressjs/mongoose/mongoose-auth/everyauth

我想在開發過程中使用數據庫表通過電子郵件地址將用戶列入白名單,但我希望auth的主要方法是Facebook。我希望mongoose-auth只在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; 
    } 

看來,無論我放在那裏,它都會失敗並使服務器崩潰。我顯然缺少一些東西。任何幫助,將不勝感激。

回答

1

我沒有測試過這一點,但我敢肯定,你只需要返回無極就像其它代碼塊都在做

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

是的,你確實是對的。我曾嘗試過,但沒有意識到發生了什麼事。看起來我必須用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 page在這個簡短的說明。

+0

我認爲'validateRegistration'功能僅適用於密碼模塊,而不是Facebook。它提供了一種我可以使用的備用方法,任何登錄的用戶都可以創建帳戶,然後根據請求和路由檢查白名單。 – jhoff

相關問題