2025/01/07 | AI
with openai
En este tutorial aprenderás a instalar y configurar Django-Allauth, una herramienta esencial para implementar sistemas de autenticación robustos y flexibles en proyectos Django. Este paquete simplifica el proceso de autenticación y registro de usuarios, ofreciendo soporte para múltiples proveedores, incluido Google.
Además de guiarte en la instalación y configuración inicial de Django-Allauth, te mostraremos cómo integrarlo con Google para que los usuarios puedan iniciar sesión o registrarse utilizando sus cuentas de Google. Esto incluye los pasos necesarios para registrar tu aplicación en la consola de Google Cloud y obtener las credenciales requeridas para habilitar la autenticación.
Si estás buscando implementar un sistema de autenticación confiable y profesional en tu proyecto Django, sigue leyendo para descubrir cómo aprovechar Django-Allauth y Google para brindar una experiencia de usuario optimizada y segura. ¡Manos a la obra!
Instalar módulo django-allauth y los siguientes 2 paquetes:
pip install django-allauth
pip install jwt==1.3.1
pip install PyJWT==2.8.0
pip install requests
Añadir en settings.py a la variable INSTALLED_APPS las 3 aplicaciónes django-allauth y la aplicación que have referencia al proveedor google. También añadiremos en settings.py el SITE_ID, el SOCIALACCOUNT_PROVIDER para google y el MIDDLEWARE
INSTALLED_APPS = [
'allauth', # django-allauth*
'allauth.account', # django-allauth*
'allauth.socialaccount', # django-allauth*
'allauth.socialaccount.providers.google',# django-allauth*
]
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {
'google': {
'SCOPE': [
'profile',
'email',
],
'AUTH_PARAMS': {
'access_type': 'online',
},
'OAUTH_PKCE_ENABLED': True,
}
}
MIDDLEWARE = [
"allauth.account.middleware.AccountMiddleware",
]
AUTHENTICATION_BACKENDS = [
...
# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by email
'allauth.account.auth_backends.AuthenticationBackend',
...
]
En el archivo urls.py principal añadiremos las urls de django-allauth mediante este linea:
path('accounts/', include('allauth.urls')),
Configuración de la API de GOOGLE para django-allauth.
Accedemos a "google console", y trabajaremos en 2 apartados: Credenciales y Pantalla de consentimiento. Comenzamos con CREDENCIALES:
Credenciales > Crear creadenciales > ID de cliente de OAuth
Aplicación web
Es habitual tener probleas con las "URI de redireccionamiento autorizados". En el caso de no tener correctamente indicados, conseguiremos un error 400 mismach. Por ejemplo si hay sistema de idioma, la url para la URI de redireccionamiento autorizados hay que ponerlos con los idomas en las url, y crearlos para cada idioma. Ejemplo: http://127.0.0.1:8000/es/accounts/google/login/callback/. En el caso de no tener sistema de idiomas configurado, inficaremos sin el acrónimos de los idiomas como se muestra en la imagen:
Por ejemplo para que funcione en local y en producción se han añadido de esta manera para todas las posibilidades (con y sin "www", con y sin idiomas "/es/","/en/","/eu/"). localhost:8000 o 127.0.0.1:8000 para local y dominio retegi.eus para producción.
Una vez generada la API, tenemos 3 datos creados que debemos utilizar en el panel administrador de django.
Acceder con al panel de administrador de django y crear aplicación Google:
Ya podemos utilizar las urls de django-allauth para hacer la prueba. Es suficiente con acceder mediante el navegador a la siguiente url para mostrar las disponibles:
http://localhost:8000/accounts/
Y para iniciar sesión utilzaríamos:
http://localhost:8000/accounts/login/
Para registrarse:
http://localhost:8000/accounts/signup/
Debería mostrar el formulario para inicial sesión con google y una vez iniciada la sesión nos llevará a un html profile que no existe. Para solucionar añadiremos en settings.py los LOGIN_REDIRECT_URL y LOGOUT_REDIRECT_URL correspondientes.
En mi caso tengo estas url configuradas a las que indico (home_app:home), pero pueden apuntar a las que nos interesen.
LOGOUT_REDIRECT_URL = 'home_app:home'
LOGIN_REDIRECT_URL = 'home_app:home'
Para utilizar las urls django-allauth en nuestro código utilzan así en el caso de login y signup:
{% url 'account_login' %}
{% url 'account_signup' %}
Errores comunes:
Error 400mismatch: Ocurre porque las URI no son adecuadas. El caso habitual es tener idiomas configurado, y no añadir las URI con los idiomas indicados en las URL.
Por ejemplo is tenemos idiomas configurados, nuestra urls son:
http://locahost:8000:accounts/es/google/login/callback/
En cambio por error es habitual no indicar el idioma /es/ e indicarlo así de manera erronea:
http://locahost:8000:accounts/google/login/callback/
También es habitual no indicar la "/" final en la url:
http://locahost:8000:accounts/google/login/callback
Y hay que indicarlo con la "/" final de la siguiente manera:
http://locahost:8000:accounts/google/login/callback/