2013-12-18 25 views
3

如果我请访问http://localhost/login?code=***如何处理PassportJS端点误差

Facebook的回调链接有虚假代码:FacebookTokenError: Invalid verification code format.
具有相同的代码(重放攻击):FacebookTokenError: This authorization code has been used.
使用过期代码:FacebookTokenError: This authorization code has expired.

所有这些错误都与客户无关。我想简单地重试登录过程(再次重定向到Facebook进行身份验证)。

Express().get('/login', Passport().authenticate('facebook', { 
    failureRedirect: '/', 
}), function(req, res) { 

}); 

但是,在上述三种错误发生时,服务器只是抛出一个错误并发送给客户端。

是否存在可用于端点错误的错误回调?

+0

其备受争议的错误是“无关的客户” - 也许你的意思是他们是无关的最终用户? – srquinn

+0

@jibsales是的,最终用户不应该期望这些错误消息。 (客户=最终用户,在我的字典中:D) –

+0

它的不幸,但通过源代码快速漫步显示没有错误回调可用。您不能简单地重定向到Facebook,因为最终用户必须重新输入凭据(OAuth的工作方式的一部分) – srquinn

回答

1

下面是我使用的是什么:

// Google OAUTH sendoff 
app.get('/auth/google', 
    passport.authenticate('google') 
); 

// Google OAUTH return 
app.get('/auth/google/return', function(req, res, next) { 
    passport.authenticate('google', function(err, user, email) { 
    if (err) { return next(err); } 

    // OAUTH success, but user isn't authorized 
    if (!user && email) { 
     return res.redirect('/myNotAuthorizedUrl'); 
    // OAUTH error 
    } else if (!user) { 
     return res.redirect('/login/'); 
    // user disabled or some other check 
    } else if (user.get('is_blacklisted') !== 1) { 
     return res.redirect('/youAreEvil'); 
    } 
    // success and authorized 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/home'); 
    }); 

    })(req, res, next); 
});