77 votes

Comment vérifier si un utilisateur est connecté à Symfony2 dans un contrôleur ?

Je lis ici comment vérifier le statut de connexion d'un utilisateur à l'intérieur d'un template twig pour un site web basé sur Symfony2. Cependant, j'ai besoin de savoir comment vérifier si l'utilisateur est connecté à partir de l'intérieur d'un contrôleur. Je suis sûr que le code suivant est correct :

$user = $this->get('security.context')->getToken()->getUser();

mais il renvoie toujours quelque chose, par exemple un utilisateur connecté ou un utilisateur anonyme.

Une idée ? Merci d'avance.

0 votes

Ne pouvez-vous pas vérifier si $user != "anon." ?

0 votes

Eh bien, je cherchais quelque chose de plus "sûr". N'y a-t-il pas un autre moyen, c'est-à-dire une fonction à appeler ?

6voto

Redwan Nassim Points 152

Si vous utilisez des rôles, vous pouvez vérifier si ROLE_USER C'est la solution que j'utilise :

if (TRUE === $this->get('security.authorization_checker')->isGranted('ROLE_USER')) {
    // user is logged in
}

0 votes

En supposant que votre application attribue ROLE_USER à tout le monde. Ce n'est pas le cas de toutes les applications.

1voto

Mike Smit Points 1

C'est une bonne pratique d'étendre d'une baseController et implémenter quelques fonctions de base implémenter une fonction pour vérifier si l'instance de l'utilisateur est nulle comme ceci si l'utilisateur forme le Userinterface alors il n'y a pas d'utilisateur connecté

/**

*/
class BaseController extends AbstractController
{

    /**
     * @return User

     */
    protected function getUser(): ?User
    {
        return parent::getUser();
    }

    /**
     * @return bool
     */
    protected function isUserLoggedIn(): bool
    {
        return $this->getUser() instanceof User;
    }
}

0 votes

Je ne sais pas pourquoi cet article a été rétrogradé. Je suis un débutant en Symfony mais accéder à $this->user() depuis un contrôleur fonctionne parfaitement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X