Рабочий пример новой recaptcha с Rails?

Есть ли у кого-нибудь рабочий пример новой recaptcha Google в приложении Rails? Каждый проводник, которому я стараюсь следовать, является либо неясным, либо неполным, и, по-видимому, использует другой метод.

Предпочтительным будет ручной прокат.




Работа в процессе:

конфигурации/среда/production.rb:

  #...
  recaptcha_public_key= "[PUBLIC KEY]"
  recaptcha_private_key= "[PRIVATE KEY]"
end

конфигурации/среда/development.rb:

  #...
  recaptcha_public_key= "[PUBLIC KEY]"
  recaptcha_private_key= "[PRIVATE KEY]"
end

конфигурации/Инициализаторы/recaptcha.rb

Recaptcha.configure do |config|
  config.public_key  = Rails.application.secrets.recaptcha_public_key
  config.private_key = Rails.application.secrets.recaptcha_secret_key
  config.api_version = 'v2'
end

Ответы

Ответ 1

Используя драгоценный камень recaptcha, я создал пример, в котором используется метод флажка.

Код доступен здесь: https://github.com/sunnyrjuneja/recaptcha_example

Заряды должны быть очень легко следовать. Дайте мне знать, если у вас возникнут вопросы.

Пример приложения здесь: https://recaptcha-checkbox.herokuapp.com/

UPDATE:

Вот способ сделать это без secrets.yml.

Измените свой инициализатор таким образом:

Recaptcha.configure do |config|
  config.public_key  = ENV['RECAPTCHA_PUBLIC_KEY']
  config.private_key = ENV['RECAPTCHA_PRIVATE_KEY']
end

В своей среде разработки или производства добавьте это в свой .bashrc или .zshrc.

export RECAPTCHA_PUBLIC_KEY="YOURPUBLICKEY"
export RECAPTCHA_PRIVATE_KEY="YOURPRIVATEKEY"

Если вы используете Heroku для развертывания, сделайте это в своей командной строке:

heroku config:set RECAPTCHA_PUBLIC_KEY="YOURPUBLICKEY"
heroku config:set RECAPTCHA_PRIVATE_KEY="YOURPRIVATEKEY"

Ответ 2

Пожалуйста, следуйте этим инструкциям:

Шаг 1. Создайте приложение Ruby on Rails: -

a) Откройте терминал, перейдите в каталог, в котором у вас есть права на создание приложения и введите: reils new recap

b) После создания приложения перейдите в его папку:

$cd recap

c) Введите и выполните установку пакета:

$bundle install

Шаг 2. Создание моделей, представлений и контроллеров: -

Шаг 3. Интеграция Google Recaptcha с Ruby On Rails: -

a) Войдите на сайт Google Recaptcha, чтобы зарегистрировать домен ur для доступа. (https://www.google.com/recaptcha/intro/index.html)

b) Пожалуйста, зарегистрируйтесь и зарегистрируйтесь на сайте c) После регистрации google предоставит

Тег

Script помещает этот фрагмент перед закрывающим тегом в свой HTML-шаблон.   div разместите этот фрагмент в конце того, где вы хотите виджет reCAPTCHA.

d) После выполнения вышеуказанных шагов мы можем увидеть recaptcha на сайте.

f) Для проверки на стороне сервера мы можем использовать секретный ключ и ответ, который будет отправлен в качестве параметров для действия отправки формы в контроллере.

g) Чтобы проверить, проверял ли Google этот пользователь, отправьте запрос GET с этими параметрами: URL: https://www.google.com/recaptcha/api/siteverify

Шаг 4. Изменение кода приложения для проверки на стороне сервера.

Подробнее см. ниже,

1) recaptcha-in-rails

2) google-recaptcha-in-rails

В макете:

<script src='https://www.google.com/recaptcha/api.js'></script>

My view app/views/users/_form.html.erb:

<div class="g-recaptcha" data-sitekey="6LdgWwETAAAAAPwAddRqDtNbt9sdfsfsfsdJhggghhKKYTdadsHt54"></div>

В инициализаторах:

SECRET_KEY = "my_secret_key_here"

В User Controller:

 def verify_google_recptcha(secret_key,response)
  status = `curl "https://www.google.com/recaptcha/api/siteverify?secret=#{secret_key}&response=#{response}"`
     logger.info "---------------status ==> #{status}"
     hash = JSON.parse(status)
     hash["success"] == true ? true : false
  end

  def create
    @user = User.new(user_params)
    status = verify_google_recptcha(SECRET_KEY,params["g-recaptcha-response"])
    respond_to do |format|
    if @user.save && status
      format.html { redirect_to @user, notice: 'User was successfully created.' }
      format.json { render :show, status: :created, location: @user }
    else
      format.html { render :new }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end
logger.info "---------------status ==> #{status}" will print like below

В ошибке:

---------------status ==> {
"success": false,
 "error-codes": [
  "missing-input-response"
 ]
}

Успешно

 ---------------status ==> {
"success": true
}

В этом случае вы можете взять status["error-codes"][0], и вы можете показать его в _form.html.erb

Смотрите мое приложение в heroku

Ответ 3

Смотрите мой блог, вы можете найти пошаговую реализацию google recaptch https://gurudathbn.wordpress.com/2015/01/22/google-recaptcha-with-ruby-on-rails-integration/ для четкого решения. Никакой драгоценный камень не требуется!

Интеграция Google Recaptcha с Ruby On Rails: -

a) Войдите на сайт Google Recaptcha, чтобы зарегистрировать свой домен, чтобы получить доступ. (https://www.google.com/recaptcha/intro/index.html)

Войдите и зарегистрируйте свой сайт с информацией, как показано ниже.

Зарегистрируйте свой домен, чтобы получить доступ

c) После регистрации укажите

Тег

Script помещает этот фрагмент перед закрывающим тегом </head> в свой HTML-шаблон. div разместите этот фрагмент в конце того, где вы хотите, чтобы виджет reCAPTCHA появлялся регистрация google обеспечивает.

d) После выполнения вышеуказанных шагов мы можем увидеть recaptcha на сайте.

f) Для проверки на стороне сервера мы можем использовать секретный ключ и ответ, который будет отправлен в качестве параметров для действия отправки формы в контроллере.

g) Чтобы проверить, проверял ли Google этот пользователь, отправьте запрос GET с этими параметрами: URL: https://www.google.com/recaptcha/api/siteverify

Изменение кода приложения для проверки на стороне сервера.

для запроса google и получения статуса

a) Мы напишем помощника для запроса google и получим статус: -

def verify_google_recptcha(secret_key,response)
  status = `curl "https://www.google.com/recaptcha/api/siteverify? secret=#{secret_key}&response=#{response}"`  
  hash = JSON.parse(status)
  hash["success"] == true ? true : false
end

b) Теперь мы можем использовать этот помощник для проверки состояния контроллера: -

   status = verify_google_recptcha(SECRET_KEY,params[‘g-recaptcha-response’])

где статус будет истинным или ложным. Если false, мы снова представим страницу формы для повторной отправки еще, мы примем форму.

Ответ 4

Вы должны попробовать этот пример из RailsCarma Blog.

Выполните следующие действия: 1) Получить учетные данные 2) Добавить метки recaptcha 3) Чтобы обработать проверку, создайте класс recaptcha 4) В диспетчере регистраций добавьте метод verify_recaptcha

Настройка Шаг 1: -

Добавьте в свой файл gem следующее:

gem "recaptcha", :require => "recaptcha/rails"

Шаг 2: -

Войдите на сайт developers.google.com и войдите в свою учетную запись gmail и выполните поиск 'recaptcha. Нажмите ссылку "Регистрация для ключа API". Проверьте ключи секретности и сайта. Как следует из самого названия, секретный ключ должен храниться в более безопасном месте, тогда как ключ сайта - это открытый ключ, используемый для аутентификации в Google. Зарегистрируйте имя своего сайта в своей учетной записи google, чтобы получить общедоступный и закрытый ключ, который будет использоваться позже в приложении.

После завершения регистрации вы получите открытый ключ и закрытый ключ. С клиентской стороны открытый ключ отправляется на службу recaptcha для запроса нового кода. Закрытый ключ применяется на стороне сервера для проверки ввода правильного значения.

Затем зарегистрируйтесь для ключа API reCAPTCHA и добавьте его в файлы конфигурации среды:

#put this in development.rb and in production.rb
ENV_RECAPTCHA_PUBLIC_KEY= ‘your-public-key’
ENV_RECAPTCHA_PRIVATE_KEY= ‘your-private-key’

Шаг 3: -

Create a file named recaptcha.rb in config/initializers to configure recaptcha parameters.
Recaptcha.configure do |config|
config.public_key = ‘ ENV_RECAPTCHA_PUBLIC_KEY’
config.private_key = ‘ENV_RECAPTCHA_PRIVATE_KEY’
config.proxy = ‘http://www.google.com/recaptcha/api/verify’
end

Шаг 4: - Вид

Captcha Gem помогает визуализировать реальный блок captcha. Его так же просто, как вставить следующее в ваш взгляд в том месте, где вы хотите, чтобы отображалось изображение:

<%= raw recaptcha_tags %>
If you are using SSL, use this instead:
<%= recaptcha_tags :ssl => true %>, The SSL option ensures we send a https request to the recaptcha service.

Шаг 5: - Контроллер

Captcha Gem предоставляет другой вспомогательный метод, который отправляет сервер API reCaptcha для проверки правильности представления. Если это тогда, метод возвращает true, если нет, он добавит собственное сообщение об ошибке, которое recaptcha неверно для экземпляра модели. Вот базовый код, который может быть у вас в создании действия вашего контроллера: -

В разработке контроллеров, приложений/контроллеров/registrations_controller.rb, введите следующий код:

require ‘recaptcha.rb’
before_action :verify_recaptcha, only: [:create]
def verify_recaptcha
response = Recaptcha.verify(params)
session[:sign_up] = params[:user].except(:password, :password_confirmation, :remoteip)
if response.code == 200
if response[‘success’]
flash[:notice] = "Recaptcha verification successful."
else
redirect_to new_user_registration_path(user: params[:user]),
alert: "Recaptcha verification error."
end
else
redirect_to new_user_registration_path(user: params[:user]),
alert: "HTTP connection error."
end
end

Сеанс [: sign_up] сохраняется, так как форма регистрации может быть предварительно заполнена, если проверка завершилась неудачно.