Nová reCAPTCHA pro formuláře

revoke
Člen | 36
+
0
-

@uestla Ano, taky si to myslím. Nemám teď ale prostor hledat řešení, navíc se zrovna tento formulář obejde i bez AJAXu. Myslel jsem, že je potíž na mé straně, ale on to tak asi nikdo nepoužívá. Každopádně díky.
P.S.: oprav prosím ten link na recaptchu, třeba se na to kouknu později

uestla
Backer | 783
+
+1
-

Opraveno.

uestla
Backer | 783
+
0
-

@revoke Na GitHub na tohle někdo zadával Issue – https://github.com/…ol/issues/20

Je tam i odkaz na Gist, ale nezkoušel jsem to.

duskohu
Člen | 774
+
0
-

Ahojte snazim sa rozchodit Invisible reCAPTCHA, nacitavam recaptcha.ajax.js
ale stale sa mi zobrazuje verzia, kde musim zaskrtavat nie som robot. Neviete mi poradit co mam zle?

duskohu
Člen | 774
+
0
-

Vyriesil som to tak ze som zmenil recaptcha.ajax.js na recaptcha.Invisible.ajax.js, len neviem ci je to spravne.

uestla
Backer | 783
+
0
-

@duskohu Ahoj, zkoušel jsi invisible recaptchu v příkladech?

https://github.com/…95/README.md#…

jAkErCZ
Člen | 321
+
0
-

Zdravím,
mám problém používám ReCaptcha ve svém formuláři a i když člověk něověří tak nevyskočí žádná hláška jestli jsi robot a projde to validací.. :D

$form->addReCaptcha('recaptcha', $label = 'Captcha', $required = TRUE, $message = 'Nejsi robot?');

 <div class="form-group">
            <div n:name="recaptcha"></div>
        </div>

<script src='https://www.google.com/recaptcha/api.js'></script>

Takto to mám.. Nějká rada proč?

uestla
Backer | 783
+
0
-

@jAkErCZ Ahoj, jakou verzi používáš? Argument $required už neexistuje. Jsi schopný debuggerem zjistit, jestli reálně dojde k validaci? Případně prosím o minimální setup, abych byl schopen to reprodukovat.

jAkErCZ
Člen | 321
+
0
-

uestla napsal(a):

@jAkErCZ Ahoj, jakou verzi používáš? Argument $required už neexistuje. Jsi schopný debuggerem zjistit, jestli reálně dojde k validaci? Případně prosím o minimální setup, abych byl schopen to reprodukovat.

Ahoj,
používám
Config:

recaptcha:
    secretKey: ***klíč***
    siteKey: ***klíč***
"contributte/recaptcha": "^3.3",

Ale ani to nevaliduje je to tam sice vidět dá se na to kliknout ale formulář to absolutně ignoruje.

Editoval jAkErCZ (9. 6. 2020 16:25)

uestla
Backer | 783
+
0
-

Aha, ale tohle je vlákno pro tuhle recaptchu: https://github.com/…ptchaControl

contributte recaptchu, kterou používáš, už tu pár lidí řešilo – podívej se třeba na https://forum.nette.org/…-se-formular, jestli tam nenajdeš odpověď.

jAkErCZ
Člen | 321
+
0
-

Zdravím,
přešel jsem z balíčku contributte/recaptcha na tento ale zjistil jsem že při odeslání formuláře to absolutně ignoruje ReCaptchu.. A i když není zakliklá tak to projede validací.

$form->addReCaptcha('recaptcha', NULL, "Please prove you're not a robot.");

Latte:

<div class="form-group input-icon-left">
        <div n:name="recaptcha"></div>
        {* don't forget to render potential errors *}
	    {$form['recaptcha']->getError()}
        {dump $form['recaptcha']->getError()}
    </div>

Dump mi vrací null..

Díky za rady

uestla
Backer | 783
+
0
-

@jAkErCZ To je poměrně závažné, mohl bys mi prosím připravit izolovaný příklad, abych to mohl reprodukovat?

jAkErCZ
Člen | 321
+
0
-

uestla napsal(a):

@jAkErCZ To je poměrně závažné, mohl bys mi prosím připravit izolovaný příklad, abych to mohl reprodukovat?

No mám to řešené takto.

/**
     * @param $name
     * @return Form
     */
    protected function createComponentRegisterForm($name) {
        $form = new Form($this, $name);
        $form->addText('name')
            ->setRequired('Jméno a Příjmení je povinné!');
        $form->addEmail('email','')
            ->setRequired('Email je povinný!');
        $form->addPassword('password', 'Heslo')
            ->setRequired('Heslo je povinné!');
        $form->addPassword('password_repeat', 'Heslo znovu')
            ->setOmitted()
            ->setRequired(false)
            ->addRule(Form::EQUAL, 'Hesla nesouhlasí.', $form['password']);
        $form->addCheckbox('rules')
            ->setRequired('Musíte souhlasit s podmínkami!');
        $form->addReCaptcha('recaptcha', NULL, "Please prove you're not a robot.");

        $form->addSubmit('send', 'Odeslat');
        $form->addSubmit('register', 'Registrovat se');

        $form->onSubmit[] = [$this, 'processRegister'];

        return $form;
    }

a v Latte:

{block content}
    <div class="login-popup-wrap new_login_popup">
        <div class="login-popup-heading text-center">
            <h4><i class="fa fa-lock" aria-hidden="true"></i> {_sign.up.header} </h4>
        </div>
        {form registerForm}
    <ul n:if="$form->errors">
        <li class="alert alert-danger" n:foreach="$form->errors as $error">
            {$error}
        </li>
    </ul>
    <div class="form-group input-icon-left">
        <i class="fa fa-user"></i>
        <input type="text" class="form-control" n:name="name" placeholder="{_sign.up.user}">
    </div>
    <div class="form-group input-icon-left">
        <i class="fa fa-envelope"></i>
        <input type="email" class="form-control" n:name="email" placeholder="{_sign.up.email}">
    </div>
    <div class="form-group input-icon-left">
        <i class="fa fa-lock"></i>
        <input type="password" class="form-control" n:name="password" placeholder="{_sign.up.pass}">
    </div>
    <div class="form-group input-icon-left">
        <i class="fa fa-check"></i>
        <input type="password" class="form-control" n:name="password_repeat" placeholder="{_sign.up.pass_rep}">
    </div>
    <div class="form-group input-icon-left">
        <div n:name="recaptcha"></div>
        {* don't forget to render potential errors *}
	    {$form['recaptcha']->getError()}
        {dump $form['recaptcha']->getError()}
    </div>
    <div class="form-actions">
        <div class="checkbox checkbox-primary">
            <input n:name="rules" type="checkbox" id="checkbox">
            <label for="checkbox">{_sign.up.term}</label>
        </div>
    </div>
    <button n:name="register" type="submit" class="btn btn-primary btn-block">{_sign.up.register}</button>
{/form}
        <div class="text-center">{_sign.up.reg_text}<a n:href="login">{_sign.up.reg_sub}</a></div>
    </div>
{/block}
{block scripts}
    <script type="text/javascript" src="{$basePath}/js/live-form-validation.min.js"></script>
    {include parent}
    <!-- re-Captcha -->
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
{/block}

A v tomto případě pokud vyplním všechny pole a nezašrtnu captchu tak i tak formulář projde beze změny a ani funkce {$form[‚recaptcha‘]->getError()} a ani $form->errors nec neodchytne.

Editoval jAkErCZ (13. 10. 2020 19:44)

uestla
Backer | 783
+
0
-

@jAkErCZ Zkus místo onSubmit[] použít onSuccess[] a otestovat, že se ti formulář zpracuje, i když nevyplníš reCAPTCHu.

Pokud to neprojde, zkus si oddebugovat, jestli za to nemůže tenhle try-catch, případně si vytáhni Validator z DI containeru a přidej si do $onError logování při nastalé chybě…

jAkErCZ
Člen | 321
+
0
-

uestla napsal(a):

@jAkErCZ Zkus místo onSubmit[] použít onSuccess[] a otestovat, že se ti formulář zpracuje, i když nevyplníš reCAPTCHu.

Pokud to neprojde, zkus si oddebugovat, jestli za to nemůže tenhle try-catch, případně si vytáhni Validator z DI containeru a přidej si do $onError logování při nastalé chybě…

Super tak opravdu stačilo použít jen onSuccess[] jen ještě dotaz používám live-form-validation a chce se zeptat jak by šlo přidat aby to validovalo i reCaptchu?

uestla
Backer | 783
+
+1
-

@jAkErCZ onSubmit se totiž vykoná po každém odeslání formuláře nezávisle na tom, jestli je validní nebo ne – pozor na to.

Ohledně JS validace reCAPTCHy tě odkážu na oficiální dokumentaci: https://developers.google.com/…cs/invisible#…

Ale v podstatě by mělo jít pouze o volání grecaptcha.execute() při validaci formuláře.

jAkErCZ
Člen | 321
+
+1
-

uestla napsal(a):

@jAkErCZ onSubmit se totiž vykoná po každém odeslání formuláře nezávisle na tom, jestli je validní nebo ne – pozor na to.

Ohledně JS validace reCAPTCHy tě odkážu na oficiální dokumentaci: https://developers.google.com/…cs/invisible#…

Ale v podstatě by mělo jít pouze o volání grecaptcha.execute() při validaci formuláře.

Super díky za rady :)

H0w4rd
Člen | 82
+
0
-

Jen se chci zeptat, funguje uestla/recaptcha-control s reCaptcha verzí 3?

Píše mi to totiž:

CHYBA pro vlastníka webu:
neplatný typ klíče