Cómo configurar python-social-auth en Django

VM Vera Mazhuga Vera Mazhuga

Vera Mazhuga

Software Developer
2 min read.

python-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

VM Vera Mazhuga 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.

Newsletter

Subscribe to our newsletter:

Read more

Colores RGBA, HSL y HSLA en CSS3

Tradicionalmente en CSS los valores de los colores se han expresado en valores RGB. CSS3 da una vuelta a este sistema y añade...

1 min read.

Build Once. Own Forever.