【发布时间】:2015-06-23 07:12:52
【问题描述】:
是否可以在调用passport.js验证函数之前验证google recaptcha是否成功?
我在选择一个或另一个之间陷入困境,因为两者都使用异步回调进行验证,而我无法将它们放在一起。
function verifyRecaptcha(key, rq, rs, pa, callback) {
https.get('https://www.google.com/recaptcha/api/siteverify?secret=' + SECRET + '&response=' + key, function (res) {
var data = '';
res.on('data', function (chunk) {
data += chunk.toString();
});
res.on('end', function () {
try {
var parsedData = JSON.parse(data);
// return true;
callback(parsedData.success, rq, rs, pa);
} catch (e) {
// return false;
callback(false, rq, rs, pa);
}
});
});
}
app.post('/auth/signin', can_access.if_not_logged_in(), passport.setupLocalStrategy(),
function (req, res) {
console.log('HERE');
verifyRecaptcha(req.body['g-recaptcha-response'], function (success) {
if (success) {
// find a way to signal captcha succeeded.
return true;
} else {
res.end('Captcha failed, sorry.');
// TODO: take them back to the previous page
// and for the love of everyone, restore their inputs
return false;
}
});
},
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: 'auth/signin',
failureFlash: true
}));
我想在验证码成功后进行身份验证
【问题讨论】:
-
您能否展示您现有的代码,因为您无法同时调用两个异步回调?
-
我在卡住的地方添加了代码。我想首先检测验证码是否成功,如果成功,它将返回 true,这将允许 post 方法移动以检查身份验证。
标签: node.js authentication passport.js recaptcha