Рассмотрим сегодня несложный процесс подключения Recaptcha к вашей, предположим, форме комментирования материалов в блоге, написанном на Ruby-on-Rails. Как это сделать?
Прежде всего, в Gemfile rails-приложения добавим gem Recaptcha. Или даже добавим два гема (dotenv loads variables from a .env file into ENV when the environment is bootstrapped), таким вот образом:
gem 'dotenv-rails', :require => 'dotenv/rails-now'
gem "recaptcha", require: "recaptcha/rails"
, после чего, разумеется, bundle install.
В корне проекта создаем файл .env, содержащий private и public ключи Recaptcha, полученные... ну, это вы и сами знаете, надеюсь, где получить ключи гугловской рекапчи. Получится примерно так (не забываем заменить звездочки на ключи для своего домена):
export RECAPTCHA_SITE_KEY = '*************************************'
export RECAPTCHA_SECRET_KEY = '*************************************'
Теперь в форме комментариев, где-то перед submit, размещаем тег Recaptcha:
<%= recaptcha_tags %>
После чего Recaptcha моментально начинает отображаться на страничке... да, но необходимо добавить еще и логику в контроллер, который мы намереваемся защищать. Это способно быть, например, следующим образом:
comments_controller.rb
class CommentsController < ApplicationController
http_basic_authenticate_with name: "admin", password: "12345", only: :destroy
def create
@article = Article.find(params[:article_id])
if verify_recaptcha
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)
else
render text: 'Recaptcha error'
end
end
def destroy
@article = Article.find(params[:article_id])
@comment = @article.comments.find(params[:id])
@comment.destroy
redirect_to article_path(@article)
end
private
def comment_params
params.require(:comment).permit(:commenter, :body)
end
end
Вместо render text: 'Recaptcha error' можете использовать все что угодно, ну например:
render(
html: "<script>alert('Recaptcha error!')</script>".html_safe,
layout: 'application'
)
, либо же просто вернитесь назад:
def create
@article = Article.find(params[:article_id])
if verify_recaptcha
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)
else
redirect_to article_path(@article)
end
end
...плюс масса иных вариантов. Счастливо вам покреативить.
Продолжение, как нередко у нас бывает - на форуме.