1
我有一個lambda函數,我試圖用來驗證google recaptcha
。我知道我從客戶端發送了正確的數據,這是響應,但我一直收到驗證失敗的控制檯消息。 這裏是我的代碼:如何爲Google reCaptcha修復此AWS Lambda功能?
//Lambda Function I am using
var AWS = require('aws-sdk');
const https = require('https');
const googleRecapchaSecret = "<site-secret-key>";
/*
Sample response query string
https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string
*/
function validateRecaptcha(recaptchaResponse, callback, error){
var querystring = require('querystring');
var postData = querystring.stringify({secret : googleRecapchaSecret,response : recaptchaResponse});
var options = {
hostname: 'www.google.com',
path: '/recaptcha/api/siteverify',
method: 'POST',
port: 443,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
var req = https.request(options, (res) => {
res.on('data', (d) => {
if (d === undefined){ error('undefined'); return}
var response = JSON.parse(d);
console.log(response);
if(response.success === true){
callback('true');
}else{
callback(response);
}
});
});
req.write(postData);
req.end();
req.on('error', (e) => {
//console.log(e);
callback('false');
});
}
module.exports.grouveReCaptcha = (event, context, callback) => {
data = event;
if(data.body === undefined) { context.fail('Must provide parameters!'); return; }
console.log('Received Event:',data.body);
if(recaptchaResponse === undefined){
context.fail('Recaptcha cannot be validated!');
return;
}
var recaptchaResponse = event.body.data;
validateRecaptcha(recaptchaResponse, function(err, data){
if (err) {
console.log("ReCAPTCHA verification failed!");
\t callback(null, {'success': false, 'message': "You appear to be a robot!"});
\t \t \t context.done(err, null);
} else {
console.log("ReCAPTCHA verification succeeded!");
context.done(null, data);
}
});
};
這裏是我的html,我使用在客戶端:
<script type="text/javascript">
var onloadCallback = function() {
grecaptcha.render('quote-g-recaptcha', {
'sitekey': '6LexBSQUAAAAAC_cimQqwFkJ-833td9V3gMDUIZM',
'callback': verifyCallback
});
};
</script>
<div class="g-recaptcha" id="quote-g-recaptcha" style="transform:scale(0.77);-webkit-transform:scale(0.77);transform-origin:0 0;-webkit-transform-origin:0 0;"></div>
<script type="text/javascript">
var verifyCallback = function(response) {
AWS.config.update({
region: 'us-east-1'
});
AWS.config.credentials = new AWS.Credentials('AKIAIPE54LWXYNXASZTQ', 'G3UHubDlKEtVN+zY2ycoUNeRpDcGO734i1Vf7xj0');
var lambda = new AWS.Lambda({
region: 'us-east-1',
apiVersion: '2015-03-31'
})
var pullReCaptchaParams = {
FunctionName: 'ReCaptchaGrouve',
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify({
response
})
};
lambda.invoke(pullReCaptchaParams, function(error, data) {
if (error) {
prompt(error);
} else {
pullReCaptchaResults = JSON.parse(data.Payload);
console.log('User Verified');
}
});
var pullReCaptchaResults;
};
</script>