【问题标题】:Django reCAPTCHA does not validate the responseDjango reCAPTCHA 不验证响应
【发布时间】:2013-05-25 15:35:30
【问题描述】:

我正在尝试在我的表单上实现 Django reCAPTCHA。问题是,它不会每次都验证 reCAPTCHA 会话,我正确提交了表单。我尝试提交 reCAPTCHA 表单大约 30 次,但仍然无法验证 reCAPTCHA。

我已经在开发服务器上实现了 reCAPTCHA,并将域添加为 www.example.com 。

我也在用这个教程http://www.chrisumbel.com/article/recaptcha_with_django

这可能是为什么,它不会验证,因为我正在使用开发,否则有人可以帮助我吗?

from django.contrib.auth.views import password_reset
from django.shortcuts import render
from recaptcha.client import captcha  


def forgot_password(request):
    if request.method == 'POST':
        response = captcha.submit(request.POST.get('recaptcha_challenge_field'),  request.POST.get('recaptcha_response_field'),  '1231d12dsad12',  request.META['REMOTE_ADDR'],)  


        if response.is_valid:
            captcha_response = "YOU ARE HUMAN: %(data)s" % {'data' :  edit_form.data['data_field']}  
        else:  
            captcha_response = 'YOU ARE ROBOT'
            return render(request, 'forgot_password.html',{'captcha_response':captcha_response})



    else:
        return render(request, 'forgot_password.html')

模板

{% block title %}Forgot Password<br>{% endblock title %}


<form method="post" action="{% url accounts:forgot-password %}">
    {% csrf_token %}
    <p>Please enter your email address.
        You will receive a link to create a new password via email.</p>

    <input type="email" name="email"
        placeholder="Your e-mail"><br/>



        <th>Are you human?</th>  

            <span class="validation_error">{{ captcha_response }}</span>  

            <script type="text/javascript"  
            src="http://api.recaptcha.net/challenge?k=123dwqsdasd123e23d32d32">  
            </script>  

            <noscript>  
            <iframe src="http://api.recaptcha.net/noscript?k=123dwqsdasd123e23d32d32">  
            height="300" width="500" frameborder="0"></iframe><br>  
            <textarea name="recaptcha_challenge_field" rows="3" cols="40">  
            </textarea>  
            <input type="hidden" name="recaptcha_response_field"   
            value="manual_challenge">  
            </noscript>  


                 <button type="submit">Send new password</button>

</form>  

【问题讨论】:

  • 如果您还没有这样做,请尝试将您的 reCaptcha 密钥设为全局。
  • @Piotr Jaszkowski 你能解释一下 lil abit 更多关于使密钥全球化
  • 啊抱歉,您不能将密钥更改为全局密钥。但是您可以在此站点上启用全局选项创建新的:google.com/recaptcha/admin/create
  • 你为什么将它作为 iframe 访问?可以是一个简单的表单域
  • @karthikr 哦,教程说要通过 iframe 访问它

标签: django


【解决方案1】:

你可以自己实现:

import urllib, urllib2, re

def recaptcha(request, postdata):
        rc_challenge = postdata.get('recaptcha_challenge_field','')
        rc_user_input = postdata.get('recaptcha_response_field', '').encode('utf-8')
        url = 'http://www.google.com/recaptcha/api/verify'
        values = {'privatekey' : 'PRIVATE-KEY', 'remoteip': request.META['REMOTE_ADDR'], 'challenge' : rc_challenge, 'response' : rc_user_input,}
        data = urllib.urlencode(values)
        req = urllib2.Request(url, data)
        response = urllib2.urlopen(req)
        answer = response.read().split()[0]
        response.close()
        return answer

当输入验证码时返回 true,否则返回 false。

在您看来,您可以这样做:

if request.method == "POST":
    postdata = request.POST.copy()
    captcha = recaptcha(request, postdata)
    if captcha:
        #do something
    else:
        #do something else

您将不得不稍微调整您的模板,应该不难弄清楚。希望这会导致正确的方向。

【讨论】:

  • 请问,我需要做哪些调整?我学习 django 才几个月:(
  • 嗯,也许它就像你已经得到它一样工作。如我所见,{{ captcha_response }} 应该从您的视图中呈现。您也可以将 javascript 更改为指向 google api('
  • 让我知道,当出现问题时,我在几个网站上成功地实施了这种验证码。当 google-api-servers 没有响应时,我还没有实现一些东西,所以你必须自己做。
  • 我不知道为什么它不起作用。也许是因为我在开发中使用它
【解决方案2】:

django-recaptcha就简单明了

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 2018-10-28
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2015-06-15
    相关资源
    最近更新 更多