UserInterface et PasswordAuthenticatedUserInterfacePremiè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(): void { }
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.
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.
Utilisez la commande make:registration. Comme dans le TD2, répondez no à la question qui vous
propose d'envoyer des e-mails.
Testez le formulaire d'inscription. Pour le rendre fonctionnel, vous aurez besoin d'ajouter le champ
name.
Rendez-vous ensuite sur /login et /logout, et l'identification devrait fonctionner!
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é.
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.
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