#perl #cgi #md5 #captcha
#perl #cgi #md5 #captcha
Вопрос:
Я работал над регистрационной формой для игры, которую я разрабатываю, все работает нормально, кроме captcha. Он продолжает указывать неверный sol, хотя я правильно ввожу ответ. Я пробовал отладку с помощью Data::Dumper
, и кажется, что он каждый раз возвращает false.
http://s15.postimg.org/vy5kt6zaz/x_REuan_W.png
Это мой код
use strict;
use warnings;
use CGI;
use Captcha::reCAPTCHA;
use Data::Dumper;
my $captcha = Captcha::reCAPTCHA->new();
my $html = CGI->new();
my $public_key = "6Ldbc9cSAAAAACYGs9FWEemI_A4Atx20sOtk6YA-";
my $private_key = "6Ldbc9cSAAAAAHs88TTzyytdrIlkbVx3h5x55t8j";
sub checkAndRegister {
my $result = $captcha->check_answer($private_key,
$ENV{'REMOTE_ADDR'},
$html->param("recaptcha_challenge_field"),
$html->param("recaptcha_response_field")
);
print Dumper($result);
if ($result->{is_valid}) {
#do stuff here
} else {
die ($result->{error});
}
}
sub output_form {
print $captcha->get_html($public_key);
}
Помощь была бы очень признательна!
Комментарии:
1. Попробуйте сузить проблему.
2. Я пытался в течение последних 2 часов, я не могу понять это, я знаю, что делаю что-то не так, но я не уверен, где.
3. «сузить» здесь означает удалить как можно больше кода, сохраняя при этом проблему; вы этого не сделали, и это, скорее всего, приведет к обнаружению вашей проблемы быстрее, чем что-либо еще.
4. Теперь он работает отлично. Я попробовал то, что вы мне сказали. Спасибо @ysth, что исправил это.
5. что ж, это хорошо. изменил мой комментарий на ответ.
Ответ №1:
Если вы запустите это в mod_perl или аналогичном, $html, используемый в checkAndRegister, будет отдельной переменной от $ html, используемого везде после первого запроса; передайте его в checkAndRegister, чтобы исправить это.
Если вы включите предупреждения, вы увидите «Переменную … не останется общедоступным» предупреждение об этом. Вы можете прочитать об этом здесь .
Комментарии:
1. Хорошо выведено, да. 1