谷歌Recaptcha在django和角度

时间:2015-08-07 14:46:02

标签: python angularjs django

我在我的网站上安装了recaptcha(使用django rest framework和angularjs),但我现在不知道如何获得g-recaptcha-response任何人都可以显示示例

$scope.submit = function() {
         $http.get('https://www.google.com/recaptcha/api/siteverify').success(function (data) {
            $http.post(callbackUrl, $scope.callback).success(function (data) {
               $scope.isFormActive = false;
            }).error(function (data, status, headers, config) {
                alert('Incorrect');
            });

            }).error(function (data, status, headers, config) {
                alert('Incorrect');
            });

        };

我现在不知道如何为https://www.google.com/recaptcha/api/siteverify设置参数密钥和响应 感谢

2 个答案:

答案 0 :(得分:0)

你可以通过在你的javascript中调用“grecaptcha.getResponse()”来获得g-recaptcha-response 来源:get_recaptcha_response

答案 1 :(得分:0)

如果您正在使用Django REST框架(DRF),则可能需要检出以下软件包:

  1. https://github.com/Maximilien-R/django-rest-framework-recaptcha
  2. https://github.com/motius/django-rest-recaptcha
  3. https://github.com/zueve/django-rest-captcha

前两个正在实现DRF Recaptcha序列化器字段,您可以将其放入序列化器中,并且它具有自己的验证器,可调用Google验证URL。最后一个(django-rest-captcha包)正在使用自己的验证器再次实现序列化器。所有软件包都在pypi上,因此您可以使用pip安装它们。

根据documentation的前端集成:

  <script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>
  <script>
  grecaptcha.ready(function() {
      grecaptcha.execute('reCAPTCHA_site_key', {action: 'homepage'}).then(function(token) {
         ...
      });
  });
  </script>

以下是使用django-rest-framework-recaptcha软件包进行BE的示例代码。

序列化器:

from rest_framework import serializers
from rest_framework_recaptcha.fields import ReCaptchaField


class ReCaptchaSerializer(serializers.Serializer):
    recaptcha = ReCaptchaField()

查看:

class VerifyTokenAPI(views.APIView):
    allowed_methods = ["POST"]

    def post(self, request, *args, **kwargs):
        serializer = ReCaptchaSerializer(data=request.data)
        if serializer.is_valid():
            return Response({'success': True}, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

网址:

urlpatterns = [
   ...
   path("/my/api/endpoint/", VerifyTokenAPI.as_view()),
]

对BE的基本测试调用:

data = {"recaptcha": "token"}
response = client.post("/my/api/endpoint/", data)
assert response.status_code == 200
相关问题