Использования simple_captcha для защиты от спама

By shuller

Не смотря на то, что в очень популярной статье Ruby on Rails Security Guide пишеться о том, что simple_captcha не самый лучший вариант для защиты от спама именно о нем и пойдет речь далее. Установка Как и для всех других плагинов для установки в консоле пишем следуйщие:

svn://rubyforge.org/var/svn/expressica/plugins/simple_captcha

Для корректной работы плагина потребуется Rmagick. Установка Rmagick выходит за рамки этого поста, но я думаю что в скором времени высветлю этот вопрос. Использование Если вам не нужна поддержка валидации на уровне модели, тогда достаточно вызвать хелпер плагина в вашем rhtml:

<%= show_simple_captcha %>

а в контроллере

if simple_captcha_valid?
переход дальше
else
перегрузить текущую страничку с ошибкой
end

В проэкте над которым я работаю это выглядело следуйщим образом:

def share
@post = Post.find(:first,:conditions => ["can_publish=1 and is_edited=1 and id=?", params[:slug].to_i])
if simple_captcha_valid?
if params[:email] =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
email = PostMailer.create_share(@post, params[:email])
blind_email = PostMailer.create_blind(@post, params[:from_email], params[:email],
params[:emailmessage])
PostMailer.deliver(email)
PostMailer.deliver(blind_email)
PostShare.create(
:post => @post,
:email => params[:email],
:from_email => params[:from_email],
:message => params[:emailmessage])
flash[:notice] = "You have sent a link for this article to #{params[:email]}."

end

render :template => 'posts/show'

else

flash[:notice] = "You have entered wrong combination from the picture. Please try again."

redirect_to post_url(@post.permalink)

end

end

Если вас не устраивает как хелпер разставляет теги вы можете заменить разметку на свою в файле ../vendor/plugins/simple_catcha/simple_captcha_action_view в методе show_simple_captcha. Использование с валидацией модели Допустим у вас есть модель Responce, которая отвечает за добавление откликов о товаре на сайте. Тогда в моделе добавлем:

class Response < ActiveRecord::Base apply_simple_captcha

В вьюшку добавляем хелпер и сабмит-кнопку для отправки запроса в контроллер

 "response"

В контроллере же вызываем метод-хелпер который проверяет поддтверждена ли картинка и сохраняет новую запись в базу:

def add_response 	@response = Response.new(params[:response])@response.save_with_captcha

end

Метки: , ,

Ответить