Maison > développement back-end > tutoriel php > Enregistrement et connexion Symfony2

Enregistrement et connexion Symfony2

Joseph Gordon-Levitt
Libérer: 2025-02-17 11:23:09
original
820 Les gens l'ont consulté

cet article détaille les processus d'enregistrement, de connexion et de connexion de Symfony2. Nous allons s'appuyer sur la base de données et la configuration de sécurité à partir de la partie 1, en nous concentrant sur la création de formulaires, la persistance des objets utilisateur et la gestion sécurisée du mot de passe.

Symfony2 Registration and Login

Concepts clés:

  • Enregistrement: Un formulaire collecte les données utilisateur (e-mail, nom d'utilisateur, mot de passe, etc.), le mappe dans un objet User et persiste cet objet dans la base de données. Un type de formulaire personnalisé (RegistrationType) gère la cartographie des champs et la gestion des données. L'application hache automatiquement le mot de passe pour la sécurité.
  • Connexion: Un formulaire de connexion simple, se soumettant à /login_check, nécessite des champs "_Username" et "_Password" - comme mandaté par le système de sécurité de Symfony.
  • Actions post-login: L'interface de sécurité de Symfony manque de crochets post-login directs. Nous implémenterons un gestionnaire de succès d'authentification personnalisé pour mettre à jour le dernier horodat de connexion de l'utilisateur.

Formulaire, base de données et RegistrationType:

Le processus d'enregistrement utilise un formulaire. Le RegistrationType (situé dans src/AppBundle/Form/Type/RegistrationType.php) définit la structure du formulaire:

class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('username', 'text', ['label' => 'User Name'])
                ->add('password', 'password', ['label' => 'Password'])
                ->add('confirm', 'password', ['mapped' => false, 'label' => 'Re-type password'])
                ->add('homepage', 'text', ['label' => 'Homepage'])
                ->add('email', 'hidden', ['label' => 'email'])
                ->add('save', 'submit', ['label' => 'Register']);
    }

    // ... (getName and setDefaultOptions methods) ...
}
Copier après la connexion

'mapped' => false empêche le champ "Confirmer" d'être enregistré dans la base de données. Le formulaire est créé et rendu à l'aide de brindilles:

{{ form_widget(form.username, {'attr': {'class': 'form-control', 'placeholder':'User Name'}}) }}
{{ form_widget(form.password, {'attr': {'class': 'form-control', 'placeholder':'Password'}}) }}
{{ form_widget(form.confirm, {'attr': {'class': 'form-control', 'placeholder':'Confirm Password'}}) }}
{{ form_widget(form.homepage, {'attr': {'class': 'form-control', 'placeholder':'Homepage'}}) }}
{{ form_widget(form.email, {'attr': {'value': email}}) }}
<!-- ... rest of the form ... -->
Copier après la connexion

Symfony2 Registration and Login

Création d'utilisateurs:

La soumission de formulaire createAction gère, crée un objet User, définit les propriétés non fournies par l'utilisateur (date de création, rôles, gravatar), crypte le mot de passe à l'aide de l'encodeur de mot de passe de Symfony et persiste l'utilisateur:

public function createAction(Request $req)
{
    // ... (get entity manager, create form, handle request) ...

    $user = $form->getData();
    $user->setCreated(new \DateTime());
    $user->setRoles(['ROLE_USER']);
    // ... (set gravatar and active status) ...

    $pwd = $user->getPassword();
    $encoder = $this->container->get('security.password_encoder');
    $pwd = $encoder->encodePassword($user, $pwd);
    $user->setPassword($pwd);

    $em->persist($user);
    $em->flush();

    return $this->redirect($this->generateUrl('login'));
}
Copier après la connexion

Connexion et manipulation post-logine:

Le formulaire de connexion (pointant vers /login_check) est simple:

<!-- ... login form with _username and _password fields ... -->
Copier après la connexion

Symfony2 Registration and Login

Les actions post-login nécessitent un gestionnaire de réussite d'authentification personnalisée (défini dans src/AppBundle/Handler/AuthenticationSuccessHandler.php et enregistré dans services.yml):

class AuthenticationSuccessHandler extends DefaultAuthenticationSuccessHandler
{
    // ... (constructor with dependency injection) ...

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        $user = $token->getUser();
        $user->setLogged(new \DateTime());
        $em = $this->container->get('doctrine.orm.entity_manager');
        $em->persist($user);
        $em->flush();
        return $this->httpUtils->createRedirectResponse($request, $this->determineTargetUrl($request));
    }
}
Copier après la connexion

Ce gestionnaire met à jour le champ logged dans l'objet User après une authentification réussie.

Ce guide complet couvre les fonctionnalités d'enregistrement et de connexion de Symfony2, mettant l'accent sur les meilleures pratiques de sécurité et la personnalisation. Une personnalisation plus approfondie, telle que la validation du formulaire et l'intégration de la connexion sociale, peut être explorée sur la base d'exigences d'application spécifiques.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal