2009-07-02 10 views
1

J'utilise les rails plugin recaptcha trouvé ici: http://github.com/ambethia/recaptcha/tree/masterRails plug-in Recaptcha renvoie toujours false

Je me suis inscrit pour un compte sur recaptcha.com, a obtenu une & publique clé privée, et le site est configuré avec une clé globale (pour l'instant).

Dans config/environment.rb configuration I les variables d'environnement:

ENV['RECAPTCHA_PUBLIC_KEY'] = 'xxxxxxxxxxxxxxxx' 
ENV['RECAPTCHA_PRIVATE_KEY'] = 'XXXXXXXXXXXXXXxx' 

À mon avis je rends le captcha comme ceci:

<%= recaptcha_tags %> 

Et dans mon traitement du contrôleur ce formulaire, j'ai ceci:

unless verify_recaptcha # <-- always returns false 
    flash[:error] = "Your captcha entry was invalid" 
    render :action=>'new' 
    return 
end 

Mon problème est que verify_recaptcha alwa ys renvoie la valeur false.

Il me manque quelque chose de simple, mais je ne le vois pas. Et avant que je reçois une réponse smart-alec, OUI je tape les mots corrects dans la boîte captcha :)

Répondre

5

Juste comme une note, assurez-vous que vous n'avez pas accidentellement basculer autour des clés publiques et privées; ils sont différents.

Je ne peux pas dire si vous manipulez déjà la possibilité qu'il est correct, dans ce cas, vous voulez avoir quelque chose comme ceci:

if verify_recaptcha 
    @thing.save! 
    redirect_to success_path 
else 
    flash[:error] = "There was an error with the recaptcha code below. Please re-enter the code and click submit." 
    render :action => 'new' 
end 

Et rappelez-vous d'utiliser:

<%= recaptcha_tags :ssl => true %> 

Si vous utilisez SSL.

+0

Merci pour les conseils, ont couvert ces domaines. –

+0

Votre réponse m'a incité à vérifier mes clés, et il s'est avéré que j'avais raté un caractère final de la clé privée. Merci! –

2

Je suis entré et j'ai regardé le plugin recaptcha. La partie pertinente lit quelque chose comme ceci:

recaptcha = Net::HTTP.post_form URI.parse("http://#{server}/verify"), { 
      "privatekey" => private_key, 
      "remoteip" => request.remote_ip, 
      "challenge" => challenge, 
      "response" => response 
      } 

Cela prend le défi et la réponse et renvoie une réponse. Quand je l'ai essayé avec un défi et une réponse que j'ai généré, j'ai obtenu "true\nsuccess". Les lignes suivantes de code retour false si:

answer, error = recaptcha.body.split.map { |s| s.chomp } 
unless answer == "true" 

Depuis mon retour "true\nsuccess", réponse sera "true", et le code devrait donc passer.

Pouvez-vous essayer d'envoyer la réponse directement en utilisant Net :: HTTP et de voir quelle réponse vous obtenez?

+0

Merci pour le pourboire, il se trouve que j'avais gras doigts ma clé privée! –

Questions connexes