Recaptcha v3是否需要后端实施?

时间:2020-07-30 08:31:15

标签: django web recaptcha

我正在使用django构建站点,并且我有一个要使用reCAPTCHA v3的表单。

Google的documentation指出有两个选择。自动将挑战绑定到按钮或以编程方式调用挑战。

我的问题是,在使用第一个选项(自动绑定)时是否需要实现任何后端更改,原因是通过阅读文档无法弄清。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

是的,您需要在后端实施验证。

我倾向于通过混合来做到这一点,以便可以将其添加到由reCAPTCHA保护的任何视图中。

class VerifyCaptchaMixin:
    """ Verify post requests which use google recaptcha """

    def post(self, request, *args, **kwargs):
        """
        Send a verification request to google if we can.
        """
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        ''' Begin reCAPTCHA validation '''
        recaptcha_response = request.POST.get('g-recaptcha-response')
        if recaptcha_response:
            # captcha verification
            data = {
                'response': recaptcha_response,
                'secret': settings.NORECAPTCHA_SECRET_KEY
            }
            resp = requests.post(
                'https://www.google.com/recaptcha/api/siteverify',
                data=data
            )
            result_json = resp.json()
            ''' End reCAPTCHA validation '''
            if not result_json.get('success'):
                err_msg = "An error has occurred with Google reCAPTCHA"
                form.add_error(None, err_msg)
                # error in recaptcha, re-render the signup form
                return render(
                    request, self.template_name, {
                        'form': form,
                        'is_robot': True
                    }
                )
        return super().post(request, *args, **kwargs)

有关此的文档在这里; https://developers.google.com/recaptcha/docs/verify