codegouvfr / keycloak-theme-dsfr

Generic Keycloak DSFR theme
MIT License
17 stars 6 forks source link

fix: username may not be of the email type #10

Closed this-is-tobi closed 3 months ago

this-is-tobi commented 3 months ago

Le nom d'utilisateur peut ne pas être un email dans Keycloak, forcer le type email dans le champs username empêche l'utilisation d'un nom d'utilisateur qui n'est pas un email.

garronej commented 3 months ago

Salut @this-is-tobi,
Merci pour la pr.
En fait ça dépend de si emailAsUsername est activé dans la configuration du realm.
Je suis ok pour merger ça mais uniquemement avec une logique conditionelle.
La propriété est sur le kcContext

this-is-tobi commented 3 months ago

Alors j'ai réfléchi / regardé et emailAsUsername permet de se connecter à l'aide de son adresse email mais ne l'oblige pas (j'ai le cas sur plusieurs Keycloak que je maintiens où j'ai bien cette option activée, ce qui permet aux utilisateurs d'utiliser leurs adresses emails OU leur noms d'utilisateur, à leur convenance).

ps: merci pour la réponse rapide 🪻

Edit: J'ai dit des bêtises j'ai confondu avec loginWithEmailAllowed, tu as raison registrationEmailAsUsername force l'email en tant que nom d'utilisateur, je corrige dans ce sens.

this-is-tobi commented 3 months ago

Au passage, si tu me l'accordes j'en profiterai bien pour rendre conditionnel l'affichage du Ou utiliser vos identifiants, dans notre cas nous n'avons pas d'autre fournisseurs d'identité (pour l'instant en tout cas) donc l'affichage sonne un peu bizarre :

Capture d’écran 2024-05-22 à 20 05 07

Si tu le veux bien je remplacerais bien :

// src/login/pages/Login.tsx

<h5>{msgStr("selfCredentials")}</h5>

Par :

// src/login/pages/Login.tsx

{(() => {
    if (social.providers.length) {
        return (
            <h5>{msgStr("selfCredentials")}</h5>
        );
    }
})()}

Si je comprends bien ce que je lis dans le kcContext, c'est ça qui détermine si il y a ou non d'autres fournisseurs d'identité.

garronej commented 3 months ago

Oui c'est bien ça!

Merci pour ta contribution!

Au passag le kcContext n'est pas propre a Keycloakify, c'est le context FreeMarker de Keycloak qui est automatiquement converti en un object javascript par Keycloakify. Donc ce qui est présent dans le kcContext est authoritatif.

Au passage, je vais bientôt mettre a jour ce theme pour le rendre compatible avec Keycloak 24.
Je le ferais quand j'aurais enfin livré Keycloakify v10: https://github.com/keycloakify/keycloakify/pull/538

this-is-tobi commented 3 months ago

Trop chouette @garronej, on est pas encore passé sur Keycloak v24 de notre côté mais je vais suivre tes travaux du coup, merci pour le boulot en cas !

Je viens de pousser la deuxième modification, n'hésites pas à me dire si tu souhaites des modifications.

garronej commented 3 months ago

Thank you!

this-is-tobi commented 3 months ago

You're welcome, btw thank you for the awesome work !

this-is-tobi commented 3 months ago

Oh @garronej ! https://github.com/codegouvfr/keycloak-theme-dsfr/actions/runs/9212447695/job/25344077778 Do you want me to fix this with a ? in social.providers?.length