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 modifico el sistema de verificación de cuentas en Djoser?

Aquí está mi modelo de usuario personalizado:

class Account(AbstractBaseUser):

    email = models.EmailField(unique=True, max_length=255)
    firstname = models.CharField(max_length=40)
    lastname = models.CharField(max_length=40)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_verif = models.BooleanField(default=)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["firstname", "lastname"]

    objects = AccountManager()

    def __str__(self):
        return self.email

    @property
    def is_staff(self):
        return self.is_superuser

    @property
    def is_admin(self):
        return self.is_superuser

    def has_perm(*args, **kwargs):
        return True

    def has_module_perms(*args, **kwargs):
        return True

Actualmente tengo un sistema de verificación de cuenta estándar de djoser. Por lo tanto, no puedo iniciar sesión con un usuario no verificado porque el campo is_active está establecido en False.

¿Dónde y cómo puedo modificar el código para que cada vez que verifique una cuenta, verifique el campo is_verif en lugar de is_active y el campo is_active siempre esté establecido como Verdadero?

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para modificar el código de manera que verifique el campo is_verif en lugar del campo is_active para la verificación de la cuenta, puedes modificar la configuración DEFAULT_USER_AUTHENTICATION en la configuración de djoser.

    1. En el archivo de configuración de Django, agrega una nueva configuración para djoser:
    DJOSER = {
        'DEFAULT_USER_AUTHENTICATION': 'ruta.a.autenticacion.personalizada',
        # ... otras configuraciones de djoser ...
    }
    
    1. Crea una nueva función de autenticación personalizada en tu aplicación:
    from djoser.conf import settings as djoser_settings
    
    def custom_authentication(user):
        if not user.is_verif:
            raise djoser_settings.CONFIRMATION_REQUIRED_EXCEPTION_CLASS('Verificación requerida.')
    
    1. Actualiza el modelo de usuario para establecer el campo is_active en True de manera predeterminada:
    class Account(AbstractBaseUser):
        # ...
    
        is_active = models.BooleanField(default=True)
        is_verif = models.BooleanField(default=False)
    
        # ...
    

    Con estos cambios, cuando un usuario se registre, la cuenta tendrá is_active establecido en True, por lo que el usuario podrá iniciar sesión de inmediato. Cuando el usuario verifique su correo electrónico, la función custom_authentication verificará el campo is_verif antes de permitirle iniciar sesión.

Comments are closed.