es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo agregar usuarios con nombre de usuario utilizando Mozilla-Django-OIDC a la tabla auth_user al iniciar sesión mediante SSO?

Estoy usando mozilla-django-oidc para iniciar sesión con SSO en una de mis aplicaciones de Django. Cuando cada usuario inicia sesión en la aplicación utilizando SSO, el usuario se agrega a la tabla auth_user de la base de datos de PostgreSQL (si el usuario aún no está guardado).

La columna de nombre de usuario de la tabla auth_user se llena con el valor hash del correo electrónico. ¿Cómo podemos guardar el valor actual del correo electrónico en lugar del valor hash en la tabla auth_user?

Una forma de lograr esto se menciona aquí en la página oficial de documentación.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para guardar el valor actual del correo electrónico en lugar del valor hash en la tabla auth_user al utilizar mozilla-django-oidc para el inicio de sesión SSO con una aplicación Django, siga los siguientes pasos:

    1. Cree un modelo de usuario personalizado:
      # models.py
      
      from django.contrib.auth.models import AbstractUser
      
      class CustomUser(AbstractUser):
          pass
      
    2. Actualice la configuración AUTH_USER_MODEL en settings.py para utilizar este nuevo modelo de usuario personalizado:
      # settings.py
      
      AUTH_USER_MODEL = 'tu_aplicacion.CustomUser'
      
    3. Cree una configuración OIDC_AUTH_USER_BACKEND en settings.py para mapear la respuesta userinfo de OIDC a los campos en el modelo de usuario personalizado:
      # settings.py
      
      OIDC_AUTH_USER_BACKEND = 'mozilla_django_oidc.contrib.django.auth.OIDCAuthenticationBackend'
      
      # mapear el campo de correo electrónico al atributo de correo electrónico en el modelo de usuario personalizado
      OIDC_AUTH_USER_MAP = {
          'first_name': 'given_name',
          'last_name': 'family_name',
          'email': 'email',
      }
      
    4. Sobrescriba el método create_user en la clase OIDCAuthenticationBackend para utilizar el modelo de usuario personalizado y guardar el valor del campo de correo electrónico tal como está:
      # backend.py
      
      from tu_aplicacion.models import CustomUser
      
      from mozilla_django_oidc.contrib.django.auth import OIDCAuthenticationBackend
      
      class CustomOIDCAuthenticationBackend(OIDCAuthenticationBackend):
          def create_user(self, claims):
              email = claims.get('email')
              if email:
                  user = CustomUser.objects.create_user(email, email=email, **self.get_user_kwargs(claims))
                  user.set_unusable_password()
                  user.save()
                  return user
              else:
                  return None
      
    5. Actualice la configuración OIDC_AUTHENTICATION_BACKENDS para utilizar este backend personalizado:
      # settings.py
      
      OIDC_AUTHENTICATION_BACKENDS = [
          'tu_aplicacion.backend.CustomOIDCAuthenticationBackend',
      ]
      

    Con estos cambios, el campo de correo electrónico del usuario se guardará tal como está en la tabla auth_user en lugar del valor hash.

Comments are closed.