我正在尝试使用Google reCAPTCHA作为我的登录表单以防止垃圾邮件。按照必要的步骤使其正常工作后,用户仍然可以登录。他们可以填写详细信息并登录,而无需勾选不正确的复选框。
我认为这可能是 DOM 中的位置,所以我尝试移动它,但没有奏效。
法典:
{% extends 'public/base.html' %}
{% load staticfiles %}
{% load crispy_forms_tags %}
{% block head %}
<link rel="stylesheet" type="text/css" href="{% static "public/css/auth.css" %}" />
{% endblock %}
{% block content %}
<div class="container mt-5 mb-5 login-container">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group mt-4">
<legend class="border-bottom mb-4">Log In</legend>
{{ form|crispy }}
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="################################
"></div>
</fieldset>
<div class="form-group">
<button class="btn btn-success" type="submit">Login</button>
<small class="text-muted ml-2">
<a href="{% url 'password_reset' %}">Forgot Password?</a>
</small>
</div>
</form>
<div class="border-top pt-3 mb-4">
<small class="text-muted">
Need An Account? <a class="ml-2" href="{% url 'register' %}">Sign Up Now</a>
</small>
</div>
</div>
{% endblock %}```
Thanks.
当您使用验证码时,文本区域会在<div class="g-recaptcha">
内动态添加。该文本区域不可见,默认情况下具有id="g-recaptcha-response"
。
您可以通过以下方式获得它:
document.getElementById('g-recaptcha-response').value
在您的登录表单中,您必须检查该文本区域是否有值。如果它有一个值,则用户已成功使用验证码,可以继续登录过程。
像这样:
<form onsubmit="return check_form()">
...
</form>
<script>
function check_form()
{
return document.getElementById('g-recaptcha-response').value != '';
}
</script>
如果check_form()
返回 FALSE,则不会提交表单。