Symfony TD4: authentification

Implémenter UserInterface et PasswordAuthenticatedUserInterface

Premièrement, il faut que nos utilisateurs implémentent l'interface UserInterface de Symfony (use Symfony\Component\Security\Core\User\UserInterface;) ainsi que PasswordAuthenticatedUserInterface.

Pour cela, ajoutez le code suivant (les méthodes manquantes) dans User:

public function getUserIdentifier(): string { return $this->getEmail(); }
public function getRoles(): array { return ['ROLE_USER']; }
public function eraseCredentials() { }

Configurer la sécurité

Dans le TD2, les utilisateurs ont été automatiquement configurés. Seulement, ici, l'entité utilisateur a été importée depuis la base de données. Vous pouvez configurer la sécurité comme cela (config/packages/security.yaml):

security:
    ...
    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email
    ...

Et changez le provider de users_in_memory en app_user_provider.

Inscription

Utilisez la commande make:registration. Comme dans le TD2, répondez no à la question qui vous propose d'envoyer des e-mails.

Le formulaire d'inscription sera pas fonctionnel, car les utilisateurs ne sont pas encore totalement configurés (par exemple, la manière dont les mots de passes sont encodés). C'est ce que nous allons faire dans l'étape suivante.

Identification

Il est possible de générer automatiquement le contrôleur de sécurité à l'aide de la commande:

symfony console make:auth

Ouvrez le fichier généré (par exemple AppAuthenticator.php). Éditez le code de manière à ce que l'utilisateur soit redirigé vers series_index après l'identification.

Rendez-vous ensuite sur /login et /logout, et l'identification devrait fonctionner!

Menu

Mettez en place un menu, dans lequel vous afficherez entre-autres "connexion" et "inscription" lorsque l'utilisateur est déconnecté, et "déconnexion" lorsque l'utilisateur est identifié.

Restriction d'accès

Protégez certaines pages, comme la liste des séries réalisée pendant le TD précédent, qui ne sera alors visible plus que par les utilisateurs connectés.

Pour ce faire, vous pouvez modifier le fichier security.yaml, et notamment sa section access_control.

Séries suivies

En utilisant l'association series de l'entité User (matérialisé par la table user_series dans la base de données), faites en sorte qu'un utilisateur puisse "suivre" une série (qui lui sera alors associée) ou arrêter de suivre une série.

Lorsqu'il se rendra sur la page de la série, il verra si il la suit ou pas.

Faites une page affichant la liste des séries suivies par l'utilisateur