Back to top

Autore Topic: Componente con captcha di joomla (tramite api?)  (Letto 2681 volte)

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Componente con captcha di joomla (tramite api?)
« il: 14 Mar 2012, 10:41:09 »
Ciao a tutti, torno a chiedere aiuto per lo sviluppo di un componente nel quale desidero inserire un controllo captcha per evitare di stressare il server per delle eventuali eccessive richieste.


Joomla 2.5 (a cui è diretto il componente) mi sembra abbia un captcha già nel core, e vorrei poterlo sfruttare nel frontend del componente contestualmente all'invio di un form. E' possibile farlo tramite qualche api? Esiste qualche metodo alternativo o devo includere captcha esterno?

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Componente con captcha di joomla (tramite api?)
« Risposta #1 il: 15 Nov 2012, 08:55:47 »
A distanza di qualche mese ho trovato questo codice, non ancora testato:
Codice: [Seleziona]
// display de captcha field in your form
$captcha = JCaptcha::getInstance('recaptcha', array('namespace' => 'anything'));
echo $captcha->display('recaptcha', 'recaptcha');

// check recaptcha answer (return true or false)
$captcha = JCaptcha::getInstance('recaptcha', array('namespace' => 'anything'));
$answer = $captcha->checkAnswer('anything');
Se ho altre novità sull'argomento le aggiungerò a questo topic

mau_develop

  • Visitatore
Re:Componente con captcha di joomla (tramite api?)
« Risposta #2 il: 15 Nov 2012, 10:09:54 »
aggiungi al tuo form un field di captcha, poi ci pensa joomla, guarda come fa il form contatti.

... aspetta che devo aggiungerlo anche ad un mio componente ... poi te lo spiego... roba di un paio di gg ..

M.

« Ultima modifica: 15 Nov 2012, 10:28:42 da mau_develop »

mau_develop

  • Visitatore
Re:Componente con captcha di joomla (tramite api?)
« Risposta #3 il: 16 Nov 2012, 11:20:45 »
ok ci siamo.. allora, il tuo codice è valido, solo che volevo usare lo stesso sistema che usa Joomla, un semplice field di type= captcha e con validation captcha. Sai che mi son letto metà framevork e non l'ho capito? :) .. però so come ci si arriva e voglio implementare lo stesso sistema.

il plugin recaptcha è un normalissimo plugin che potrebbe aver scritto chiunque, quindi faccio finta di averlo scritto io e di volerlo implementare nel mio componente, come faccio?...

Allora se si apre il file si vedono in pratica tre trigger: onInit, onDisplay e onCheckAnswer

Vediamo come "intercettarli" nel nostro componente, per qs esempio, nella view.
Nella view html del form importiamo il plugin recaptcha
Codice: [Seleziona]
JPluginHelper::importPlugin('captcha', 'recaptcha');e creiamo un instanza del dispatcher
Codice: [Seleziona]
$dispatcher = JDispatcher::getInstance();
- onInit non fa altro che fare la request http a recaptcha e google usando un api a cui accedi con le key ottenute; le invia e google ti restituisce la finestrella e tutti i suoi ammennicoli.
Quindi per usare quel trigger
Codice: [Seleziona]
$dispatcher->trigger( 'onInit');Non serve vedere nulla perchè non restituisce nulla di utile alla vista, solo lo script che si occupa dell'handling del dom.
Potete controllare guardando il sorgente della pag html generata.

a noi serve il trigger onDisplay che sarà quello che diventerà parte del nostro oggetto per renderlo disponibile al template.
E' ne più ne meno di un tag che serve allo script di onInit... un po' come succede quando si include una mappa di google
Quindi:
Codice: [Seleziona]
$captcha = $dispatcher->trigger('onDisplay');se fate un print di $captcha vedete il vostro modulino, se lo volete rendere disponibile al template diverrà un
Codice: [Seleziona]
$this->captcha=$captcha
L'ultimo trigger occorre per la verifica dell'esattezza del testo inserito e darà un return booleano ed andrà usato nello stesso modo per quello scopo.

Ora... che serve tutto ciò che ho detto? ... a capire cosa fanno (molto probabilmente) quei metodi postati da Giovi.
in pratica se allo stesso modo di cui sopra, nella view usate la classe JCaptcha:
Codice: [Seleziona]
$captcha=JCaptcha::getInstance('recaptcha')->display('recaptcha', 'recaptcha');
poi, esempio, dove controllate il form:
Codice: [Seleziona]
// Check for request forgeries.
        JRequest::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

        $captcha=JCaptcha::getInstance('recaptcha')->checkAnswer();

se $captcha è false... fate qualcosa.

con una riga ottenete lo stesso risultato :)

M.
« Ultima modifica: 16 Nov 2012, 19:32:00 da mau_develop »

Offline claudio65

  • Appassionato
  • ***
  • Post: 752
  • Sesso: Maschio
  • Buon forum a tutti
    • Mostra profilo
Re:Componente con captcha di joomla (tramite api?)
« Risposta #4 il: 27 Mar 2013, 01:24:39 »
 Ciao, ho letto questo vostro post è subito ho intuito che poteva essermi di grande aiuto.
Premesso il fatto che di PHP poco se non niente capisco ( si inizia sempre senza saper nulla:) volevo inserire il ReCaptcha nella form di invia un articolo.
Quindi dopo alcuni giorni di "passione" (pasqua è vicina) ho trovato finalmente il vostro post.
Dopo averlo attentamente letto e parzialmente, ma molto parzialmente, capito ho inserito lo script di giovi nel file component/com_mailto/views/malito/view.html.php e con il stupore del newbie  ooopss il ReCaptcha è apparso nel popup dell'invia articolo.
Purtroppo esso non influisce minimamente sull'invio della mail, infatti la mai viene regolarmente recapitata anche senza la digitazione del codice captcha.
 
P.S. il sito che sto sviluppando  (Joomla 2.5.9 ) è su alias, quindi il dominio non è attivo, forse per questo  motivo anche se ho inserito le key nel plugin, nelle pagina di contatti  mi appare:Errore
Il plugin ReCaptcha deve avere una Public Key impostata nei parametri. Contatta un amministratore del sito.
 
Mentre nella  form di registrazione utente il ReCaptcha funziona perfettamente facendo il suo prezioso lavoro.
Vi ringrazio fin d'ora se vorrete liberare la mia mente dalle nebbie.

Sordavo, prometto che studierò PHP :)
 
« Ultima modifica: 27 Mar 2013, 01:28:39 da claudio65 »

 



Web Design Bolzano Kreatif