[ { hostname: 'www.google.com', path: '/recaptcha/api/siteverify', method: 'post', headers: { 'content-type': 'application/json', 'content-length': 556 } }, '{"secret":"xxxusethisforcommunicationbetweenyoursiteandgooglexxx","response":"03ahj_vuusxdr5idgpnzqprjedgs-le066fx9r-lk1giflqlzwxappx70_lukmcosw3x-m2dsfpvqvylx060h9ijfp82fy7505_t_rjsivauiwbuyqprbmp5ktrviq_dd1l2mvmttrbieumlqm69aiug3kwmdoqmymjs2ijdrurnnvamdlpsejkasr4x-7c4iip3nomb52qsl9qpeu6kgaptxqmf1ipnwbsc3bzlxqd-qv1ai4ggaeqspfoo8epfisjmq5kbcd9wqawhqdaxmtnsvz10ty30r71hqmssk7yhddfqhei1l6y9j7nxny5qtaxhehhpywjvnji96hxeiag58_cqhgbaufy4apgalf-zj6be_xtdzd4anhxix9ouckqi8eqlh6dzlgaymxxdmpnu4tijgyyu0vetpttkf12zvug86_0zmszwzdtaljnnnxbh7bzqrgwxhy","remoteip":"00.00.000.000"}' ] if post , google returns this:
{ success: false, 'error-codes': [ 'missing-input-response', 'missing-input-secret'] } i don't see happening wrong
https://www.google.com/recaptcha/admin#site/xxxxxx?setup says:
when users submit form integrated recaptcha, you'll part of payload string name "g-recaptcha-response". in order check whether google has verified user, send post request these parameters: url: https://www.google.com/recaptcha/api/siteverify secret(required) - xxxxxx, response(required) - value of 'g-recaptcha-response', remoteip - end user's ip address.
i have sent these things! happening here? the error not wrong, says 'missing'
and above quoted text google says post not google recaptcha: how user response , validate in server side
but if try request response [ null, 400, undefined ]
update
as @mscdex pointed out application/x-www-form-urlencoded required responce still said missing secret url encoded instead figured bad may happening item @ start of object.
{'_':'_','secret':'xxxxxx','response':'whateverxxysgtsg','remoteip':'00.00.000.000'} and worked:
[ { hostname: 'www.google.com', path: '/recaptcha/api/siteverify?', method: 'post', headers: { 'content-type': 'application/x-www-form-urlencoded', 'content-length': 548 } }, '"_=_&secret=xxxxxx&response=03ahj_vuurqfgsftybllvrdgowxfnnewp4v7fpjjbod9cgpihakfbainy7ywxchraku6spu5uzpgkcptu3grx5opqxeh2qqp3nxjpibwoxfw_iv05p2ua23rzzzk0ecscmmsl1pp1uybcdj08hpaweuz2pzl6m6u71k09xqbvbpz5kt6qnb-mdpnyekdbxtc9a5oypnoohg7ax6q4ms4lis4qrnblcavkmyz6vamyitsei0a0gernli3wlsvayhc-yygv1kokijg2q8ghxv1uhklzba8t8x2ibrbnwxumbfs3qj_lfwgitntiau3keafpuljulzdosacovkpjk5xkymm2c5ydgymioeyoml9zmyyvkwfrrre8e9o_td6sattsacrcxsfygm-w0_cdbsa2iwskjimn-2b9sclozjgxxvxviuiyclik3xuuvtsobczxjaq2ikwwmttyx&remoteip=00.00.000.000"' ] [ { success: true }, 200, undefined ] but not hacky if can answer how swell!
var json={ https:require('https') , toquery:require('../node_modules/querystring').stringify , stringify:require('../node_modules/json-stringify-safe') , parse:require('../node_modules/try-json-parse') , get:function(url,callback){process.env.node_tls_reject_unauthorized="0";var req=json.https.request(url,function(res){var buffer='';res.setencoding('utf8');res.on('data',function(chunk){buffer+=chunk;});res.on('end',function(){try{var data=json.parse(buffer);callback(data,res.statuscode);}catch(e){console.log(e);}});});req.end();} , post:function(url,path,data,type,callback){if(!callback){callback=type;type=undefined;}data=json.stringify(data);var options={hostname:url,path:path,method:'post',headers:{'content-type':type||'application/json','content-length':data.length}};console.dir([options,data]);var req=json.https.request(options,function(res){var buffer='';res.setencoding('utf8');res.on('data',function(chunk){buffer+=chunk;});res.on('end',function(){try{var data=json.parse(buffer);callback(data,res.statuscode);}catch(e){console.log(e);}});});req.write(data);req.end();} }; json.post( 'www.google.com' , '/recaptcha/api/siteverify?' , json.toquery({'_':'_','secret':'xxxx','response':response,'remoteip':remoteip}) , 'application/x-www-form-urlencoded' , function(data,result,statuscode){ console.dir([data,result,statuscode]); if(result.success){} else{} });
here how in 1 of project using superagent. recaptcha-helper.js
var request = require("superagent"); var config = { recaptcha: { secret: "xxxxx", url: "https://www.google.com/recaptcha/api/siteverify", }, }; var error_codes = { "missing-input-secret": "unexpected server error (1)", "invalid-input-secret": "unexpected server error (2)", "missing-input-response": "missing recaptcha value", "invalid-input-response": "invalid recatpcha value", }; exports.geterrorcode = function (errorcode) { if (array.isarray(errorcode)) { var errors = errorcode.map(function (code) { return exports.geterrorcode(code); }); return errors.join("\n"); } return error_codes[errorcode] || (errorcode ? ("unexpected recaptcha error: " + errorcode) : "unexpected recaptcha error"); }; exports.parseresponse = function (err, res) { if (err) { return { success: false, error: err }; } else if (!res.body.success) { var error = new error(exports.geterrorcode(res.body["error-codes"])); return { success: false, error: error }; } else { return { success: true }; } }; exports.verify = function (response, ip) { if (process.env.node_env === "test") { return response ? promise.resolve() : promise.reject(new error("test recaptcha error")); } return new promise (function (resolve, reject) { request.post(config.recaptcha.url) .type("form") .accept("json") .send({ secret: config.recaptcha.secret, response: response, remoteip: ip, }) .end(function (err, res) { var parsedres = exports.parseresponse(err, res); return parsedres.success ? resolve() : reject(parsedres.error); }); }); }; and can use doing
var captchahelper = require('./recaptcha-helper'); captchahelper.verify(req.body.captcha, req.ip) .then(function () { // on success }).catch(function (err { // on error });
Comments
Post a Comment