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() { }
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
.
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.
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!
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