Nová reCAPTCHA pro formuláře
- revoke
- Člen | 36
@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 | 799
@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 | 778
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 | 778
Vyriesil som to tak ze som zmenil recaptcha.ajax.js na recaptcha.Invisible.ajax.js, len neviem ci je to spravne.
- jAkErCZ
- Člen | 322
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č?
- jAkErCZ
- Člen | 322
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 | 799
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 | 322
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
- jAkErCZ
- Člen | 322
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 | 799
@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 | 322
uestla napsal(a):
@jAkErCZ Zkus místo
onSubmit[]
použítonSuccess[]
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 | 799
@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 | 322
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 :)