Ошибка: «Невозможно использовать строку (« ») в качестве ссылки на HASH, а« строгие ссылки »в сочетании с Google recaptcha v2. Работает на локальной машине, но не на веб-хосте - PullRequest
0 голосов
/ 06 июля 2018

Я очень новичок в Perl, и мне было поручено быстрое задание изменить reCAPTCHA на reCAPTCHA v2.

На моем локальном компьютере это работает нормально, однако, когда я помещаю новую версию формы входа в систему на веб-хостинг, форма, кажется, не работает. Я получаю следующую ошибку:

AH01215: Нельзя использовать строку ("") в качестве ссылки HASH, в то время как "строгие ссылки" используются в строке 68 login_new.cgi, строка 1 .: [........]

Фрагмент кода основан на документации, которую я нашел здесь: https://metacpan.org/pod/Captcha::reCAPTCHA::V2

И согласно журналу ошибок моя ошибка где-то здесь (строка 68):

if ($submit) {
    my $response = $cgi->param('g-recaptcha-response');
    my $result = $captcha->verify($captcha_private_key, $response );

    if ($result->{success})  # This is line 68
    {....}

Это меня довольно смущает, тем более что оно работает на моей локальной машине. Не могли бы вы помочь? С уважением и заранее спасибо!

1 Ответ

0 голосов
/ 15 июля 2018

В функции проверки есть ошибка. Я только что посмотрел на реализацию. в случае, если «$ res» не является «успешным», он не вернет вам требуемую ссылку на хеш.

В качестве быстрого обходного пути я бы проверил, равен ли ваш my $result "", если в этом случае функция проверки завершилась неудачно. В долгосрочной перспективе вам, вероятно, следует отправить эту ошибку создателю модуля.

отказ от ответственности: я не скачал модуль и просто посмотрел на источник, фактически не пытаясь найти обходной путь, поэтому возьмите его с крошкой соли и попробуйте сначала в безопасной среде

sub verify {
    my ($self, $secret, $response, $remoteip) = @_;

    # ... more code here, removed for better readability

    my $res = $self->{ua}->post_form(
        $self->{verify_api},
        $params
    );

    if ($res->{success}) {
        my $content = decode_json $res->{content};
        if ($content->{success}){
            return { success => 1 };
        } else {
            return { success => 0, error_codes => $content->{'error-codes'} };
        }
    }
}
...