чтение параметров из метода создания - PullRequest
1 голос
/ 24 марта 2019

У меня есть проект ruby ​​on rails, использующий гем devise для аутентификации. Я пытаюсь использовать форму капчи на странице регистрации, чтобы боты не могли создавать тысячи фиктивных логинов

Меня не интересует использование гема recaptcha, который работает с devise, так как мне не повезло, что он правильно настроен.

Я пытаюсь настроить его, используя это как ссылку https://recaptchainrubyonrails.blogspot.com/

Вот моя страница регистрации

<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: 
registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>

<div class="field">
  <%= f.label :email %><br />
  <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>

<div class="field">
  <%= f.label :password %>
  <% if @minimum_password_length %>
  <em>(<%= @minimum_password_length %> characters minimum)</em>
  <% end %><br />
  <%= f.password_field :password, autocomplete: "off" %>
</div>

<div class="field">
  <%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation, autocomplete: "off" %>
</div>

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

<div class="actions">
  <%= f.submit "Sign up" %>
</div>
<% end %>
<br>

У меня есть файл маршрутов, указывающий на отдельный контроллер регистрации вместо того, который был создан в рамках регистрации устройства

devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout' }, :controllers => {:registrations => "registrations"}

Я могу создать пользователя независимо от того, нажму ли я на его форму. Когда я нажимаю на него, я получаю параметр g-recaptcha-response в методе создания с длинной текстовой строкой, такой как

"g-recaptcha-response"=>"1234567890abcdefghi..."

Я попытался создать метод, который бы смотрел на этот параметр и проверял, не равен ли он нулю. Когда это ноль, я хотел бы вернуть одну страницу на страницу регистрации.

class RegistrationsController < Devise::RegistrationsController

  def create
      if not params[:g-recaptcha-response].present?
        redirect_to :back
      end
  end
end 

Я даже не могу добраться до параметра, так как он выдает ошибку, говоря

undefined local variable or method `recaptcha' for #<RegistrationsController:0x7219e5a0> Did you mean? catch"

Я пытаюсь захватить этот параметр, посмотреть на значение g-recaptcha-response и как-то отменить создание пользователя, если ответ был нулевым или пустой строкой

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Хорошо, я понял, что это сработало.Спасибо всем, кто помог

    @response = params[:"g-recaptcha-response"]
    if @response == nil
        flash[:notice] = "Please click on captcha form!"
        redirect_back(fallback_location: new_user_registration_path)
    else
        flash[:notice] = "You signed up successfully!"
        redirect_to root_path
    end
0 голосов
/ 24 марта 2019

Используйте 'g-recaptcha-response' вместо :g-recaptcha-response. Вам необходимо использовать строковый синтаксис, потому что вы не можете использовать - в именовании символов

...