Maison >développement back-end >tutoriel php >Comment implémenter l'authentification automatique des utilisateurs après l'enregistrement dans Symfony ?

Comment implémenter l'authentification automatique des utilisateurs après l'enregistrement dans Symfony ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-21 17:41:11679parcourir

How to Implement Automatic User Authentication After Registration in Symfony?

Authentification automatique des utilisateurs après inscription

Dans le processus de création d'une application métier Symfony 2, il est courant de faire face au besoin d'une authentification automatique des utilisateurs après inscription. Voici comment y parvenir :

Symfony 4.0 et supérieur

L'approche de l'authentification automatique reste inchangée par rapport aux versions antérieures de Symfony. Voici un exemple utilisant AbstractController :

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use YourNameSpace\UserBundle\Entity\User;

class LoginController extends AbstractController
{
    public function registerAction()
    {
        $user = //Handle getting or creating the user entity likely with a posted form
        $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
        $this->container->get('security.token_storage')->setToken($token);
        $this->container->get('session')->set('_security_main', serialize($token));
        // The user is now logged in, you can redirect or do whatever.
    }
}

Symfony 2.6.x - Symfony 3.0.x

Dans ces versions, security.context est obsolète au profit de la sécurité. token_storage. Voici le contrôleur mis à jour :

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use YourNameSpace\UserBundle\Entity\User;

class LoginController extends Controller
{
    public function registerAction()
    {
        $user = //Handle getting or creating the user entity likely with a posted form
        $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
        $this->get('security.token_storage')->setToken($token);
        $this->get('session')->set('_security_main', serialize($token));
    }
}

Symfony 2.3.x

Dans cette version, il ne suffit pas de définir le token dans le contexte de sécurité ; vous devez également l'enregistrer dans la session :

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use YourNameSpace\UserBundle\Entity\User;

class LoginController extends Controller
{
    public function registerAction()
    {
        $user = //Handle getting or creating the user entity likely with a posted form
        $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
        $this->get('security.context')->setToken($token);
        $this->get('session')->set('_security_main',serialize($token));
        //Now you can redirect where ever you need and the user will be logged in
    }
}

N'oubliez pas d'utiliser UsernamePasswordToken avec les paramètres suivants : Entité utilisateur, Informations d'identification de l'utilisateur (facultatif), Nom du pare-feu, Rôles utilisateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn