User Tools

Site Tools


backend:symfonyuser

Symfony : User

logo

Création

Pour créer l'entité User, il faut taper :

symfony console make:user

Il faut ensuite suivre la procédure :

Entity

Méthodes

class User implements UserInterface

La classe User implémente UserInterface, elle doit donc implémenter toutes les méthodes de cette dernière. A la création, automatiquement, ces méthodes sont crées et ainsi que d'autres :


getId()

public function getId(): ?int
{
    return $this->id;
}

getEmail()

public function getEmail(): ?string
{
    return $this->email;
}

setEmail()

public function setEmail(string $email): self
{
    $this->email = $email;
 
    return $this;
}

getUsername()

public function getUsername(): string
{
    return (string) $this->email;
}

Username est un identifiant visuel, qui représente l'utilisateur.

  • Il est défini à la création par :
    Enter a property name that will be the unique “display” name for the user (e.g. email, username, uuid) [email]:
    > email

    Ici email, donc lorsqu'un utilisateur sera connecté, son email sera affiché.

getRoles()

public function getRoles(): array
{
    $roles = $this->roles;
    // guarantee every user at least has ROLE_USER
    $roles[] = 'ROLE_USER';
 
    return array_unique($roles);
}

setRoles()

public function setRoles(array $roles): self
{
    $this->roles = $roles;
 
    return $this;
}

getPassword()

public function getPassword(): string
{
    return (string) $this->password;
}

➤ Cette méthode doit renvoyer le mot de passe haché.


setPassword()

public function setPassword(string $password): self
{
    $this->password = $password;
 
    return $this;
}

getSalt()

public function getSalt()
{
    // not needed when using the "bcrypt" algorithm in security.yaml
}

➤ Lorsqu'on utilise des algorithmes modernes tels que bcrypt ou sodium (Argon2d, Argon2i, Argon2id), ce n'est pas la peine de développer cette fonction

  • Symfony le gère automatiquement.

  • Il faut juste qu'elle soit implémentée.

eraseCredentials()

public function eraseCredentials()
{
    // If you store any temporary, sensitive data on the user, clear it here
    // $this->plainPassword = null;
}

Modification

Pour modifier l'entité User, il faut taper :

symfony console make:entity user

On peut alors ajouter des propriétés à l'entité.

Repository

class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface

Méthodes

La classe UserRepository implémente PasswordUpgraderInterface, elle doit donc implémenter la méthode upgradePassword() de cette dernière. A la création, automatiquement, cette méthode est crée et ainsi que la méthode __construct() :

upgradePassword()

public function upgradePassword(UserInterface $user, string $newEncodedPassword): void
{
    if (!$user instanceof User) {
        throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user)));
    }
 
    $user->setPassword($newEncodedPassword);
    $this->_em->persist($user);
    $this->_em->flush();
}

➤ Cette méthode permet de mettre à jour le mot de passe dans la base de données lorsque l'algorithme de cryptage a changer depuis la dernière connexion de l'utilisateur.

  • $newEncodedPassword correspond au nouveau mot de passe haché.

A noter : On peut utiliser la propriété _em qui correspond à l'EntityManager car la classe UserRepository hérite de ServiceEntityRepository qui hérite, elle même, EntityRepository dans laquelle la propriété _em est défini comme l'EntityManager.


__construct()

public function __construct(ManagerRegistry $registry)
{
    parent::__construct($registry, User::class);
}

Tutoriels

- Lior Chamla : SYMFONY 4/4 : 1H POUR COMPRENDRE L'AUTHENTIFICATION !, voir les notes prises sur cette vidéo.

- LES TEACHER DU NET : Créer un clone de Pinterest avec Symfony 5 (Épisode 6/10), voir les notes prises sur cette vidéo.

backend/symfonyuser.txt · Last modified: 2020/09/16 10:35 (external edit)