Salta el contingut

UD7: MULTICAPA - AUTENTIFICACIÓ I SEGURETAT

Mitjançant les tasques que es detallen en aquest document aconseguirem la part dels resultats d'aprenentatge coberts per la UD7, atenent als seus corresponents criteris d'avaluació:

RESULTATS D'APRENENTATGE CRITERIS D'AVALUACIÓ
RA4. Desenvolupa aplicacions web incrustades en llenguatges de marques analitzant i incorporant funcionalitats segons especificacions. d) S'han identificat i caracteritzat els mecanismes disponibles per a l'autenticació d'usuaris. e) S'han escrit aplicacions que integren mecanismes d'autenticació d'usuaris.
RA9. Desenvolupa aplicacions web híbrides seleccionant i utilitzant llibreries de codi i repositoris heterogenis d'informació. e) S'han utilitzat llibreries de codi per incorporar funcionalitats específiques a una aplicació web.

Consideracions addicionals:

  • Aquestes activitats es presenten en forma de repte, amb unes pautes inicials i l'objectiu que es pretén aconseguir, per tant són activitats menys guiades que les que hem realitzat fins ara.
  • S'ha de continuar comentant el codi mitjançant el codi de tasca.
  • Qualsevol còpia (ja siga de fonts externes, literal dels apunts...) que no siga una resposta original serà qualificada amb 0. El codi no estructurat, que presente dificultats per a ser llegit no podrà ser avaluat.

Activitat 1: Modificació del model d'usuari

  • Codi: UD7.1
  • Criteris d'avaluació: RA4.e (20%)
  • Punts: 10
  • Estimació: 1h

DESCRIPCIÓ

Fins ara només ens hem autenticat mitjançant l'administrador de Django. Per a això, hem utilitzat el nom d'usuari i la contrasenya, però volem canviar aquest comportament perquè siga el correu electrònic el camp principal que identifica l'usuari, no el nom d'usuari. En l'activitat 5 treballarem més amb el correu electrònic de l'usuari.

a) Primer crea una nova app anomenada "usuaris" i afegeix-la a settings.py. (1 punt)

b) A continuació, en models.py de la nova app, estén la classe AbstractBaseUser per crear un nou model d'usuari, anomenat MyUser, el camp principal del qual siga el correu electrònic. Els camps del model seran: (7 punts)

  • username: pot ser nul (1 punt)
  • email: ha de ser únic (1 punt)
  • actiu: vertader o fals (1 punt)
  • create_date: DateTimeField, amb auto_now_add a True. (1 punt)
  • update_date: DateTimeField, amb auto_now a True. (1 punt)
  • is_staff, is_active: dos camps booleans, per defecte valor fals (1 punt)


    A més, has de definir un atribut USERNAME_FIELD, amb el valor 'email'. Tens un enllaç més avall on s'explica el propòsit d'aquest atribut. (1 punt)

    NOTA: Crea un Manager per a aquest nou model, segons l'Annex I, de forma que l'ordre de creació de superusuaris reconega el correu electrònic com el camp identificador d'usuari. Defineix aquest manager abans que el model MyUser en models.py. Hauràs de referenciar aquest manager en el model MyUser mitjançant l'atribut objects (consulta el tercer enllaç).

c) Aplica les migracions. (1 punt)

d) Configura l'administrador per poder gestionar el nou model. (1 punt)

ENLLAÇOS

Activitat 2: Login i logout

  • Codi: UD7.2
  • Criteris d'avaluació: RA4.d, RA4.e (60%)
  • Punts: 10 per cada CE
  • Estimació: 3h

DESCRIPCIÓ

a) (RA4.d) Visualitza el següent vídeo, i implementa les funcionalitats dels següents apartats (10 punts)

b) (RA4.e) Pantalla de Login (7 punts) c) (RA4.e) Botó de Logout (3 punts)

Tens certa llibertat per implementar aquestes funcionalitats, i pots utilitzar més fonts d'informació.

Activitat 3: Protecció de vistes mitjançant decoradors

  • Codi: UD7.3
  • Criteris d'avaluació: RA4.e (20%)
  • Punts: 10
  • Estimació: 30 min

DESCRIPCIÓ

Visualitza primer el següent vídeo introductori als decoradors de Python. A continuació, visualitza aquest altre vídeo on s'explica com utilitzar els decoradors per protegir determinades vistes si l'usuari no està autenticat en el sistema.

Amb tot això, aquesta activitat consisteix a protegir totes les vistes de la part privada de l'aplicació, mitjançant el decorador login_required.

Si intentes accedir a una URL protegida sense estar autenticat en el sistema, l'aplicació hauria de redireccionar-te a la pantalla de login.

Activitat 4: Django Allauth

  • Codi: UD7.4
  • Criteris d'avaluació: RA9.e (80%)
  • Punts: 10
  • Estimació: 4h

DESCRIPCIÓ

En l'activitat 2 hem implementat el login/logout de la nostra aplicació, però els usuaris no poden restablir la seua contrasenya en cas que l'obliden, entre altres accions.

En aquesta activitat explorarem el paquet Django Allauth, que ens aporta multitud de formes de realitzar l'autenticació en el nostre sistema, restablir contrasenyes, etc. En aquest enllaç trobaràs tot el referent a aquest paquet.

Amb Django Allauth es poden realitzar multitud de tipus d'autenticació (local, a través de plataformes de tercers com Facebook). Aquest paquet també ve amb les seues pròpies plantilles (pantalla de login, etc), encara que necessiten ser personalitzades per tenir un aspecte més atractiu visualment.

Aquesta activitat consistirà a seguir els passos d'aquest enllaç, instal·lar l'última versió de Django Allauth i utilitzar la plantilla de login que ve incorporada en el paquet. Aquesta plantilla ens aporta un enllaç per restablir la contrasenya. Ens hem de poder autenticar en el sistema igual que ho fèiem en l'activitat 2, però en aquest cas a través de Django Allauth. Fes els comentaris pertinents perquè les dues versions d'autenticació (segons l'activitat 2 i la 4) queden reflectides en el teu codi.

Ací tens un altre enllaç que explica també aquest procés, i que utilitzarem en la següent activitat.

Activitat 5: Enviament de correus electrònics

  • Codi: UD7.5
  • Criteris d'avaluació: RA9.e (20%)
  • Punts: 10
  • Estimació: 3h

DESCRIPCIÓ

En l'activitat 4 hem implementat el login mitjançant Django Allauth, i en l'activitat 1 hem modificat el model d'usuari per prendre el correu electrònic com el camp principal del model d'usuari, i no el nom d'usuari.

En aquesta activitat configurarem l'enviament de correus electrònics des de Django, per poder tancar el cicle d'alta d'usuari/login/logout/restabliment de contrasenya.

Basat en el segon enllaç aportat en l'activitat anterior per configurar l'enviament de correus electrònics des de Django, i així poder restablir la contrasenya dels nostres usuaris.

Pots utilitzar tant el teu compte de Microsoft365 del centre, com qualsevol altre compte personal (gmail per exemple) de la que disposes.

NOTA: Pots basar-te en qualsevol altre enllaç que trobes del teu interès, però per favor reflecteix-ho com a comentari en el teu codi.

ANNEX I: MyUserManager

class MyUserManager(BaseUserManager):
    def create_user(
        self, email, first_name=None, last_name=None, password=None, type=None
    ):
        """
        Crea i guarda un usuari amb el correu electrònic i la contrasenya donats.
        """
        if not email:
            raise ValueError("Cal proporcionar un correu electrònic vàlid")

        user = self.model(
            email=self.normalize_email(email),
            first_name=first_name,
            last_name=last_name,
        )

        user.is_active = True
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        """
        Crea i guarda un superusuari amb el correu electrònic i la contrasenya donats.
        """
        if not email:
            raise ValueError("Cal proporcionar un correu electrònic vàlid")

        user = self.model(email=self.normalize_email(email))

        user.set_password(password)
        user.is_staff = True
        user.is_active = True
        user.is_superuser = True
        user.save(using=self._db)
        return user

Recorda d'inserir la següent línia en el model MyUser:

objects = MyUserManager()