2017-02-20 65 views
0

Я пытаюсь настроить reCaptcha с помощью Devise, и я хочу добавить фильтр, который проверяет, является ли verify_recaptcha истинным, прежде чем разрешить создание пользователя. Если это ложь, пользователь не должен создаваться.devise before_action: Проверить reCaptcha перед созданием пользователя

Я пытался следовать за Devic's documentation о том, как это сделать, но, похоже, это не работает в моем случае. Я также тестирую recaptcha в режиме производства, и общая настройка работает, и я могу проверить, является ли reCaptcha истинным или ложным.

Это то, что Завещание говорит мне делать в RegistrationsController:

prepend_before_action :check_captcha, only: [:create] # Change this to be any actions you want to protect. 

private 
def check_captcha 
    unless verify_recaptcha 
    self.resource = resource_class.new sign_up_params 
    respond_with_navigational(resource) { render :new } 
    end 
end 

Не работает. Im 100% уверен, что метод verify_recaptcha работает, и это не что-то не так с настройкой.

Я пробовал:

class RegistrationsController < Devise::RegistrationsController 
    before_action :check_captcha 

    private 
    def check_captcha 
     if !verify_recaptcha == true 
     flash[:recaptcha_error] = "Fejl. Husk at sætte flueben i at du ikke er en robot" 
     signupuser_users_path 
     end 
    end 

конец

Но не повезло. Как мне это сделать? Где обычно разрабатываются методы проверки, которые должны выполняться до того, как пользователь зарегистрируется?

+0

Я думаю, в вашем контроллере вы должны поместить этот 'prepend_before_action: check_captcha, только: [: создать]' вместо 'before_action: CHEC k_captcha', потому что я думаю, вам нужно это только на регистрацию – Sunny

+0

Спасибо. В конце концов я получил метод разработки, чтобы работать с кодом в моем ответе ниже – sneglefar

+0

Можете ли вы дать мне голосование по моему комментарию – Sunny

ответ

0

Сделано это работа в конечном счете, изменяя крошечную часть метода DEViSE в:

prepend_before_action :check_captcha, only: [:create] # Change this to be any actions you want to protect. 

private 
def check_captcha 
    unless verify_recaptcha 
    self.resource = resource_class.new sign_up_params 
    respond_with_navigational(resource) { redirect_to :back } 
    end 
end 

Я предполагаю, что это за завещанию немного слишком продвинутым для меня катиться с моим собственным способом, но немного подправить сделана хорошо решение

0

вы можете использовать яваскрипт проверку

<%= submit_tag "Sign Up", :onclick => "return validatecaptcha();" %> 

<script type="text/javascript" language="javascript"> 
    function validatecaptcha(){ 
     var captcha_response = grecaptcha.getResponse(); 
     if(captcha_response.length == 0) 
     { 
      // Captcha is not Passed 
      $("#notice").html('<div class="alert alert-danger">'+"Captcha mandatory"+'</div>'); 
      return false; 
     } 
     else 
     { 
      // Captcha is Passed 
      return true; 
     } 
    } 
</script> 

 Смежные вопросы

  • Нет связанных вопросов^_^