Лучший способ использовать Google Recaptcha V3 в Django - PullRequest
0 голосов
/ 04 марта 2019

Сначала я должен сказать, что я прочитал это , и это не то, что мне нужно.Я хочу иметь формы, которые я сделал с помощью html / css, а не django форм.

И мой метод основан на это , то есть на самом деле в PHP.

Я написал код, и он отлично работает , но я считаю, что должен быть лучший способ сделать это.

Суть кода в том, что я отправляю свою форму, отправляю данные и токен Google Reaptcha в свою функцию, изатем выполнить некоторый процесс, затем, чтобы перенаправить на относительную страницу с результатами процессов, я снова возвращаю URL и статус в jQuery и перенаправляю на эту страницу с помощью jQuery.

Вот мой код:

login.html:

<script src="https://www.google.com/recaptcha/api.js?render=here is recaptcha public key"></script>
<!-- login form and etc -->

<script>
$('#loginForm').submit(function() {
    // stop what loginform is going to do
    event.preventDefault();
    var username = $('#username').val();
    var password = $("#password").val();
    grecaptcha.ready(function () {
      grecaptcha.execute("here is recaptcha public key", 
         {action: "{% url 'basic_app:login_page' %}"}).then(function (token_id) 
              {$('#loginForm').prepend('<input type="hidden" name="g-recaptcha-response" value="' + token_id + '">');
                $.post("{% url 'basic_app:login' %}",  // url
                   {username: username,password: password,
                    token_id: token_id,csrfmiddlewaretoken: '{{ csrf_token }}'},
                       function( result ){
                            console.log(result);
                            if(result.status == 0) {
                                    window.location.replace(result.url)
                            } else if (result.status == 1){
                                    window.location.replace(result.url)
                            }
                        },
                'json');
          });
      });
  });

views.py:

def user_login(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        token_id = request.POST.get('token_id')
        if(token_id):
            secretKey = "here is recaptcha secret key"
            data = {
                'secret': secretKey,
                'response': token
            }
            r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
            result = r.json()
            ....
            ## some codes for more security 
            ....
            response = {'status': 0, 'message':"", 'url': '/'}
            return HttpResponse(json.dumps(response), content_type='application/json')
        else:
            response = {'status': 0, 'message':"", 'url': '/login_page'}
            return HttpResponse(json.dumps(response), content_type='application/json')     

....

есть ли проблемы с безопасностью в этом методе?
и есть ли способ написать лучший код для использования recaptcha V3?спасибо.

1 Ответ

0 голосов
/ 28 мая 2019

Лучшие шаги:

  1. Когда пользователь нажимает кнопку "Отправить", запретите поведение по умолчанию
  2. внутри onSubmit, выполните g-recaptcha и сохраните токен внутри формы
  3. вызовthis.submit () или form.submit (), как в учебнике ниже
  4. , проверяют капчу в вашем представлении.

Как реализовать Google Recaptcha v3 на вашем djangoприложение

...