2017-06-14 1 views
0

Je travaille sur une application Rails 5.0.3 (avec Ruby 2.4.1) et j'essaie d'installer une fonction Recaptcha v2 sur le formulaire de contact sur mon site.Constante non initialisée Recaptcha (NameError) lors de l'utilisation de recaptcha gem pour rails app

Je reçois l'erreur suivante: -

/config/initializers/recaptcha.rb:1:in `<top (required)>': uninitialized constant Recaptcha (NameError) 
    from /home/[$user]/.rvm/gems/ruby-2.4.1/gems/railties-5.0.3/lib/rails/engine.rb:648:in `block in load_config_initializer' 

Pour mettre en œuvre la fonctionnalité que je suivais la documentation de la pierre précieuse recaptcha ici https://github.com/ambethia/recaptcha

Dans mon Gemfile je: -

gem 'dotenv-rails', require: 'dotenv/rails-now' 
gem 'recaptcha', require: 'recaptcha/rails' 

Dans mon fichier .env (qui se trouve dans le dossier racine), j'ai ceci: -

RECAPTCHA_SITE_KEY= xxxxxxxxxxxxxxxxxxxxxxxxxx 
RECAPTCHA_SECRET_KEY= xxxxxxxxxxxxxxxxxxxxxxxxx 

Et je cela dans la config/initializers/recaptcha.rb: - ​​

Recaptcha.configure do |config| 
    config.site_key = ENV['RECAPTCHA_SITE_KEY'] 
    config.secret_key = ENV['RECAPTCHA_SECRET_KEY'] 
end 

De l'avis que j'ai ceci: -

. 
    . 
    . 
    <%= f.label :content %> 
    <%= f.text_area :content, class: 'form-control' %> 
    <br> 
    <%= recaptcha_tags %> 
    <br> 
    <div class="actions"> 
     <%= f.submit "Send", class: "btn btn-primary center-block" %> 
    </div> 
    <% end %> 
    . 
    . 
    . 

Dans mon contrôleur, j'ai ceci: -

def create 
    @message = Message.new(message_params) 
    if !verify_recaptcha(model: @message) && @message.valid? 
    . 
    . 
    . 

Comme je peux le voir à partir de l'erreur, l'initialiseur ne se charge pas. Je ne suis pas un expert sur les initialiseurs, donc je n'ai aucune idée de la façon dont ils sont chargés ou de ce que je dois faire pour les charger.

+0

avez-vous installé le paquet? – Sajin

+0

plusieurs fois. J'ai également essayé de redémarrer le serveur. – RawCode

+0

essayez d'exiger 'recaptcha' dans le fichier initialiseur – Sajin

Répondre

2

Mais vous n'avez pas besoin d'un bijou. vous restituez le recaptcha comme celui-ci 1) importer le script Google

<script src="https://www.google.com/recaptcha/api.js" async defer></script> 

2) mettre un div avec la classe appropriée à l'intérieur de la forme que vous êtes intérêt comme celui-ci

<form action="?" method="POST"> 
     <div class="g-recaptcha" data-sitekey=" 
<%=Rails.secrets.recaptcha_key%>"></div> 
     <br/> 
     <input type="submit" value="Submit"> 
</form> 

Ensuite, pour valider dans votre contrôleur, juste faire une demande de poste

if valid_captcha?(params['g-recaptcha-response']) && @user.save 

def valid_captcha?(recaptcha_response) 
    return true if Rails.env.test? 

    HTTParty.post(
     Rails.application.secrets.recaptcha_url, 
     body: { 
     secret: Rails.application.secrets.recaptcha_secret_key, 
     response: recaptcha_response 
    })["success"] 
end 
+0

Merci pour cela, j'étais en fait en essayant d'implémenter ceci par moi-même mais je ne savais pas comment écrire le code pour la méthode de contrôleur qui vérifie le captcha. C'est pourquoi je suis allé chercher la gemme. Vos instructions étaient sur le point. J'ai dû faire un peu de refactoring pour afficher un message flash lors d'un captcha raté, mais sinon c'était génial. Merci! – RawCode