Nová reCAPTCHA pro formuláře
- uestla
- Backer | 799
[Staré vlákno již zemřelo, založil jsem proto nové]
ReCaptchaControl 2
Aktualizoval jsem doplněk přidávající reCAPTCHu do formulářů, protože se na scéně objevila její nová (a příjemnější) verze.
Budu rád za jakékoli připomínky.
Ať slouží.
Editoval uestla (25. 6. 2017 2:13)
- uestla
- Backer | 799
Také jsem to řešil. Problém byl, že oni radí načítat jejich script v hlavičce. Ale když chci vykreslovat explicitně, musí v momentě ten předávaný callback už existovat, tj. i jQuery by myslím mělo být načtené (i když je-li to callback, teoreticky by nemuselo – vyzkouším to), a jQuery načítám až vespod stránky.
Dám vědět a kdyžtak updatuju README. Díky.
- uestla
- Backer | 799
Tak nakonec byl problém v tom, že jsem zvyklý javascripty psát stylem
tam, kde používám jQuery. To by ale vyžadovalo načtenost jQuery ještě před načtením reCAPTCHA api. To by ostatně nevadilo, proto jsem updatoval přiložený script, aby byl pokud možno co nejrobustnější.
- Felix
- Nette Core | 1258
Vim, ze je to dost podobne. Nicmene jsem to mel v kompu jiz delsi dobu, akorat jsem to nehodil na github.
- webdata
- Člen | 153
uestla napsal(a):
Formulář se odešle a výsledek je jaký? Nezapomínáš navěšovat validační pravidlo? Nebo máš na mysli nevalidování se na straně javascriptu? To totiž není implementované.
Vše mám dle readme na gitu. Formulář vykresluji ručně a vše funguje tak jak má. Ale captch je tam prostě na ozdobu, je jedno zda se uživatel ověří nebo ne. Protože žádná hláška typu ‚dokaž že jsi člověk‘ nikde nevyskočí i přesto, že mám ošetřený výpis chyb formuláře.
- Pavel Kravčík
- Člen | 1202
@duff123: Je to rozbitý a nefunguje to.
- Kontrola composer.json (je to tam správě napsané?)
- Composer update (proběhne bez chyb?)
- Kontrola vendor složky (je fyzicky složka uestla\Catchpa?)
- Volání se správným namespace (\ReCaptcha, nebo use)
- H0w4rd
- Člen | 98
Prosím jak to mám udělat, když mám projekt, který běží pod několika doménama a potřebuju mít více site key a secret key?
Ideálně bych potřeboval, aby ve třídě ReCaptcha byl setter pro $siteKey a $secretKey.
Potom bych totiž mohl při vytváření formuláře udělat:
$form["captcha"]->getReCaptcha()->setSiteKey("bbbb")->setSecretKey("aaaaaa");
Bylo by možné udělat takovou úpravu?
Nebo je jiná možnost, jak měnit site key a secret key podle situace?
Editoval H0w4rd (3. 2. 2016 16:45)
- uestla
- Backer | 799
To je zajímavá situace, nenapadlo mě, že takový scénář může nastat. V tuhle chvíli je bohužel celá extension napevno svázaná s jedním siteKey a secretKey, aniž by se dala měnit (implementaci setterů považuji za trochu nešťastnou, protože by se přepsala pro celý zbytek aplikace v rámci daného requestu).
Jako možné rozšíření mě napadlo přidat možnost nastavit několik „namespace“, kdy by každý měl svůj siteKey a secretKey a při vkládání prvku do formuláře by měl uživatel možnost zvolit, který z namespaců chce použít (s tím, že defaultně by se vybíral ten první).
Bohužel teď neoplývám dostatkem volného času, abych něco takového napsal, čili jestli má někdo chuť a pochopil mnou nastíněné řešení, nebo někoho napadlo nějaké lepší, jsem pullům otevřen :-)
- H0w4rd
- Člen | 98
Problém je v tom, že sami uživatelé si budou moct ty domény založit, když se zaregistrují do aplikace a zadají si tam tu svou doménu (potom už si sami nasměrují DNS záznam A nebo CNAME), nastaví si nějaké parametry a webová aplikace jim pojede na jejich doméně s jejich nastavením. No a potřebuju, aby si sami mohli zadat i ty klíče pro recaptchu. Není možné, abych ty klíče povoloval třeba já, že by mi třeba chodily mailem po registraci, to bych se z toho zbláznil. A všem uživatelům přístup do té správy také dát nemohu.
S těmi namespace jsem to příliš nepochopil. Hlavně ale potřebuju, aby se ty klíče mohly brát z databáze.
Škoda, ten setter by mi problém vyřešil. Bylo by mi jedno, že by se to změnilo pro celý zbytek aplikace v rámci daného requestu, ta recaptcha je na stránce jen jedna, čemu by to vadilo?
Nebylo by třeba možné, abych klíče zadával už tady?
$form->addReCaptcha('captcha', "sdfasdfdasfdasfasd", "fdasfasdfsdafsa");
Editoval H0w4rd (3. 2. 2016 21:55)
- H0w4rd
- Člen | 98
Diky, udelal jsem to tak a funguje to.
Mam s tim jenom jeden mensi problem:
Metody getSiteKey a getSecretKey z te tridy Config se volaji pri kazdem
requestu, i kdyz na strance recaptcha neni. Jak tomu zabranit? Zbytecne se
posila dotaz do databaze.
Editoval H0w4rd (4. 2. 2016 11:46)
- randallll
- Člen | 22
webdata napsal(a):
Takže jsem zkoušel nasadit captchu, vše OK ale až na jedno. Captcha se sice zobrazí ale je úplně jedno zda se ověřím nebo ne – formulář se stejně odešle. Jinak to zkouším na nette 2.3.1 a formulář renderuji ručně (možná to bude ten problém).
tohle jeste nikdo neopravil ??? dik
- Václav Kraus
- Člen | 77
@randallll Já to používám na několika projektech a tento problém jsem ještě neměl. Takže nejspíš ano :)
- uestla
- Backer | 799
Ve verzi 3 došlo k hlavní úpravě, a sice, že validační pravidlo se navěšuje rovnou, tedy ne ručně – upravil jsem podle toho instrukce a ukázku v úvodním příspěvku.
- GEpic
- Člen | 566
EDIT:
Stejně jako se psalo víše, mám v tuto chvíli reCaptchu pouze pro ozdobu.
Neudělal jsem nic víc, než je implementace dle tvého githubu. Vykresluji
formulář ručně, každopádně zkoušel jsem i {control contactForm} a
taktéž bez úspěchu.
PS: Formulář zpracovávám kompletně v onSubmit
, je to takto
správně?
Editoval GEpic (3. 7. 2016 3:26)
- GEpic
- Člen | 566
uestla napsal(a):
@GEpic Nejspíš nemáš verzi 4 – v ní už se
setRequired()
volá. Zkus si spustittests/basic.php
v prohlížeči, jestli ti bude fungovat…
Sem kre*én :) … Samozřejmě že s tímto v composeru –
"uestla/recaptcha-control": "3.*"
to fungovat nebude.
Díky, funguje skvěle!
Editoval GEpic (3. 7. 2016 14:52)
- dubblen
- Člen | 9
Dobrý den,
pokouším se již nějaký pátek rozchodit recaptchu, ale bohužel bez úspěchu. ReCaptcha se mi vykresluje, ale bohužel nelze formulář odeslat. Do JS console se vypisuje: „Error: ReCAPTCHA placeholder element must be empty“. API key mám zaregistrované u Google. Domény také přidané.
Neone config:
Továrničku mám takto:
Poté v šabloně takto:
Zkoušel jsem i takto:
prosím o pomoc, už si nevím rady. Děkuju…
Editoval dubblen (19. 8. 2016 6:58)
- dubblen
- Člen | 9
uestla napsal(a):
@dubblen Zkusil jsem vykreslit recaptchu pomocí
n:name
a vše funguje. Hlásí to chybu v konzoli i po @GEpic ově úpravě?Používáš form nějak „nestandardně“ (vykresluješ vícekrát na jedné stránce, AJAX, …)?
Vykresluju už pomocí {input recaptcha}, ale pořád žádná změna. Chybu v JS consoli jsem již vyřešil. V templatě jsem importoval recaptcha.js 2× (zbytky z některého z pokusů v minulosti). Každopádně na celkové (ne)funkčnosti to nic nezměnilo. Když v továrničce odmažu řádek s addReCpatcha, tak vše funguje. Ale bez ReCaptchy…
Editoval dubblen (21. 8. 2016 17:26)
- GEpic
- Člen | 566
dubblen napsal(a):
uestla napsal(a):
@dubblen Zkusil jsem vykreslit recaptchu pomocí
n:name
a vše funguje. Hlásí to chybu v konzoli i po @GEpic ově úpravě?Používáš form nějak „nestandardně“ (vykresluješ vícekrát na jedné stránce, AJAX, …)?
Vykresluju už pomocí {input recaptcha}, ale pořád žádná změna. Chybu v JS consoli jsem již vyřešil. V templatě jsem importoval recaptcha.js 2× (zbytky z některého z pokusů v minulosti). Každopádně na celkové (ne)funkčnosti to nic nezměnilo. Když v továrničce odmažu řádek s addReCpatcha, tak vše funguje. Ale bez ReCaptchy…
No já měl taky problém ten, že jsem musel importovat skript v hlavičce <head>, namísto v patičce stránek, jako je to s ostatními JS.
- GEpic
- Člen | 566
dubblen napsal(a):
Tohle je tracy dump requestu z presenteru. Pro jistotu recaptcha.js načítám taky už v <head>. Stále bez úspěchu. Po kliknutí na „Odeslat“ se stránka pouze refreshne, ale nic se neprovede.
No a když přidáš k formuláři událost onError a
zkusíš dumpnout $form->getErrors()
?
PS: Taky se mrkni jestli máš poslední verzi reCaptchy.
Editoval GEpic (21. 8. 2016 20:14)
- dubblen
- Člen | 9
GEpic napsal(a):
dubblen napsal(a):
Tohle je tracy dump requestu z presenteru. Pro jistotu recaptcha.js načítám taky už v <head>. Stále bez úspěchu. Po kliknutí na „Odeslat“ se stránka pouze refreshne, ale nic se neprovede.
No a když přidáš k formuláři událost onError a zkusíš dumpnout
$form->getErrors()
?PS: Taky se mrkni jestli máš poslední verzi reCaptchy.
Vypíše tohle:
Recaptchu ale zaškrtávám.
Mám poslední verzi reCaptchy.
Editoval dubblen (21. 8. 2016 21:30)
- dubblen
- Člen | 9
uestla napsal(a):
Chyby formuláře tedy v šabloně nevypisuješ. Máš správně nastavený siteKey a secretKey? Máš povolenou doménu, na které reCAPTCHu používáš (localhost by měl jít automaticky)?
siteKey i secretKey mám zapsaný správně. Vyvíjím lokálně. I tak mám pro jistotu localhost přidaný.
Editoval dubblen (21. 8. 2016 23:48)