Рабочий пример новой 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] сохраняется, так как форма регистрации может быть предварительно заполнена, если проверка завершилась неудачно.