Skip to content

Instantly share code, notes, and snippets.

@fredycoding
Last active July 19, 2022 12:48
Show Gist options
  • Save fredycoding/69809147f075f12129d111b68f0be641 to your computer and use it in GitHub Desktop.
Save fredycoding/69809147f075f12129d111b68f0be641 to your computer and use it in GitHub Desktop.
Recaptcha de Google V3 en DJANGO

Implementación de recaptcha de Google en Django - Formulario Login

  • Ingresamos a Recaptcha de Google V3 y generamos un nuevo sitio con recaptcha V3
  • En Dominios ingresamos 127.0.0.1 para el desarrollo de localhost y el sitio web que vamos a proteger, ejemplo empleados.com sin el https
  • Aca nos genera 2 claves recaptcha una para el front-end y la otra para el back-end
  • La del front-end es Clave del sitio web
  • La del back-end es Clave secreta recaptcha

FRONT-END FORMULARIO login.html

Como ejemplo en el formulario de login.html debemos hacer lo siguiente:

Agregar clase y datos al botón submit

Debemos agregar esta clase g-recaptcha y la clave del sitio web que genera recaptcha acá: data-sitekey="6Lfrey0fAAA**************" data-callback='onSubmit' data-action='submit'

El botón quedaría de la siguiente manera:

<button type="submit" class="btn btn-primary btn-md btn-block waves-effect text-center m-b-20 g-recaptcha" data-sitekey="6Lfrey0fAAAA*****************" data-callback='onSubmit' data-action='submit'>
Ingresar
</button>

Colocamos este SCRIPT en el login.html en la zona inferior

Lo dejamos tal cual, hay que tener en cuenta dos cosas:

  • Donde dice token lo dejamos así
  • En el form-login es el id del form, en caso de no tenerlo le colocamos uno.
 <script>
   function onSubmit(token) {
     document.getElementById("form-login").submit();
   }
 </script>

BACK-END EN VIEWS.PY

En la sección que valodamos el login, antes de ello colocamos lo siguiente:

  • En esta sección usamos la segunda clave que es la llamada clave secreta del google recaptcha, y en este ejemplo lo colocamos en cap_secret
#***** Pasamos por el recaptcha de Google
captcha_token = request.POST.get("g-recaptcha-response")
cap_url = "https://www.google.com/recaptcha/api/siteverify"
cap_secret = "6Lfrey0fAAAAABEp***************"
cap_data = {"secret": cap_secret, "response": captcha_token}
cap_server_response = requests.post(url=cap_url, data=cap_data)
# print(cap_server_response.text)
cap_json = json.loads(cap_server_response.text)
# print(cap_json["score"])
# ******Validamos el recaptcha de Google
if cap_json["success"] == False or cap_json["score"] < 0.85:
     messages.error(request, '!Invalid form')
     return redirect('login')
else:
     # Aca continuamos con nuestro código pues ya pasó la validación de recaptcha

Sin título-1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment