Cómo configurar python-social-auth en Django
Vera Mazhuga
Software Developerpython-social-auth es un aplicación para Django que permite autenticar los usuarios vía las redes sociales tales como Google, Twitter, Facebook, etc.
Para usar esta aplicación, primero hay que instalarla, usando la siguiente instrucción en la línea de comandas:
pip install python-social-auth
Luego hay que registrarla por medio de agregar a la lista de INSTALLED_APPS
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
también a TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
)
para poder usarla en nuestras plantillas.
Consideremos el uso python-social-auth
con el ejemplo de autorización con la cuenta de Google. Primero tenemos que decir a python-social-auth
cuales backends hay que usar:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'social.backends.google.GoogleOAuth2',
)
Primero hay que obtener la llave y el código secreto. En la página de soporte de Google se puede encontrar la descripción de cómo funciona la autentificación con OAuth2. Esos datos se escriben en el archivo settings.py:
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'tu-id-de-cliente'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'tu-código-secreto'
Ahora se puede usar la autentificación.
Ahora vamos a ver algunas configuraciones complementarias. Usando la variable SOCIAL_AUTH_LOGIN_REDIRECT_URL
se puede definir la url a que el usuario será redirigido en caso del login exitoso:
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/tu-url/'
Si quieres limitar los dominios de los correos con que los usuarios pueden entrar a tu sitio de web, puedes especificarlos en la lista de WHITELISTED_DOMAINS
:
WHITELISTED_DOMAINS = ['axiacore.com', 'gmail.com']
Usando los pipelines se puede gestionar qué va a pasar con el usuario después del login. De manera predeterminada, python-social-auth
tiene el siguiente comportamiento:
SOCIAL_AUTH_PIPELINE = (
# recibe vía backend y uid las instancias de social_user y user
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
# Recibe según user.email la instancia del usuario y lo reemplaza con uno que recibió anteriormente
'social.pipeline.social_auth.social_user',
# Trata de crear un username válido según los datos que recibe
'social.pipeline.user.get_username',
# Crea un usuario nuevo si uno todavía no existe
'social.pipeline.user.create_user',
# Trata de conectar las cuentas
'social.pipeline.social_auth.associate_user',
# Recibe y actualiza social_user.extra_data
'social.pipeline.social_auth.load_extra_data',
# Actualiza los campos de la instancia user con la información que obtiene vía backend
'social.pipeline.user.user_details',
)
En el paso siguiente hay que añadir los urls de python-social-auth
a sus routers:
urlpatterns = patterns(
'',
url(
r'^social/',
include('social.apps.django_app.urls', namespace='social')
),
)
Luego hacemos syncdb
y ejecutamos la migración (en caso de usar South):
./manage.py syncdb
./manage.py migrate social_auth
Para mostrar el botón de autentificación en nuestra plantillla, usamos el siguiente código:
<a href="{% url 'social:begin' 'google-oauth2' %}">Entrar con la cuenta de Google</a>
Written by Vera Mazhuga
Vera specializes in writing and maintaining code for various applications. Her focus on problem-solving and efficient programming ensures reliable and effective software solutions.