jenaiz.com - RubyOnRails
Instalación de recaptcha
Julio 31st, 2008 - [Enlace local]
Si el otro día hablábamos de crear comentarios gracias al plugin acts_as_commentable, creo que convendréis conmigo en que nos dejamos una cosita en el tintero, ¿qué pasa con la seguridad? Existen infinidad de robots en internet que si ven un formulario y pueden utilizarlo, no dudarán en hacerlo. Por lo que nuestro sistema de comentarios está inconcluso: debemos protegerlo. Y que mejor manera que añadir Recaptcha para validar el envio de un comentario.
Paso uno e indispensable, instalación del plugin:
script/plugin install http://svn.ambethia.com/pub/rails/plugins/recaptcha
Si queréis, podéis utilizar la última versión del plugin, que está alojada ahora en github, por lo que si no habéis experimentado con git aún, os lo recomiendo como experiencia para empezar a utiliar git.
Por si os interesa lo anterior, el plugin ahora se encuentra en: http://github.com/ambethia/recaptcha.
Lo primero que os recomiendo es que vayáis a Recaptcha y obtengáis vuestras llaves, pública y privada, que hacen falta para poder utilizar el plugin; en mi caso ya las estaba utilizando en este blog. No os las pego por seguridad y porque no os servirían, dado que están asociadas a la url en cuestión.
Una vez las tenéis, deben ser añadidas a environment.rb de la forma:
ENV['RECAPTCHA_PUBLIC_KEY'] = 'tullavepublica'
ENV['RECAPTCHA_PRIVATE_KEY'] = 'tullaveprivada'
En la vista, para mostrarlo, sólo tendríamos que añadir:
<%= recaptcha_tags %>
en caso de estar utilizando ssl, deberéis cambiarlo a:
<%= recaptcha_tags :ssl => true %>
Y ahora en nuestro método de publicación, debéis comprobar la validez del Recaptcha, de la forma:
if verify_recaptcha
...
else
flash[:error] = "Ha habido un error en el envio."
render :action => 'show'
end
Nosotros lo utilizamos para publicar comentarios, por lo que el método en cuestión queda como sigue:
if verify_recaptcha
@entry = Entry.find(params[:id])
comment = Comment.new(params[:comment])
@entry.add_comment comment
comment.save!
flash[:notice] = "Comentario añadido con éxito"
else
flash[:error] = "Ha habido un error en el envio del comentario."
end
redirect_to :action => 'show'
Pues nada, listo, ya tenéis validación con Recaptcha en vuestros comentarios.