Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

Подключаем Recaptcha в Rails application

Продолжаем наши заметки на полях, посвященные Ruby on Rails.

Осваиваем Ruby on Rails
Осваиваем Ruby on Rails (в коллаже использован рисунок Г. Валька)

 

Рассмотрим сегодня несложный процесс подключения Recaptcha к вашей, предположим, форме комментирования материалов в блоге, написанном на Ruby-on-Rails. Как это сделать?

 

Рабочий пример описанного в статье кода, в числе других Rails Examples - всегда возможно найти в тестовом блоге автора на herokuapp.com, welcome.

 

Прежде всего, в 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



...плюс масса иных вариантов. Счастливо вам покреативить.

 

Продолжение, как нередко у нас бывает - на форуме.

 

Оставить комментарий

Добавьте ваш комментарий