IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Erreur après installation registration form


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 2
    Par défaut Erreur après installation registration form
    Bonjour à tous j'ai installé le registration form de symfony avec la commande: php bin/console make:registration-form.
    Le formulaire fonctionne et j'ai bien le nouveau user dans ma base de données après avoir submit le nouveau formulaire mais j'ai par contre une erreur juste après le submit:


    Nom : Capture.PNG
Affichages : 320
Taille : 67,9 Ko

    et voici mon RegistrationController.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
     
    namespace App\Controller;
     
    use App\Entity\User;
    use App\Form\RegistrationFormType;
    use App\Security\LoginFormAuthenticator;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
    use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
     
    class RegistrationController extends AbstractController
    {
        /**
         * @Route("/register", name="app_register")
         */
        public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder, GuardAuthenticatorHandler $guardHandler, LoginFormAuthenticator $authenticator): Response
        {
            $user = new User();
            $form = $this->createForm(RegistrationFormType::class, $user);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                // encode the plain password
                $user->setPassword(
                    $passwordEncoder->encodePassword(
                        $user,
                        $form->get('plainPassword')->getData()
                    )
                );
                $user->setRoles(["ROLE_USER"]);
     
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($user);
                $entityManager->flush();
     
                // do anything else you need here, like send an email
     
                return $guardHandler->authenticateUserAndHandleSuccess(
                    $user,
                    $request,
                    $authenticator,
                    'main' // firewall name in security.yaml
                );
            }
     
            return $this->render('registration/register.html.twig', [
                'registrationForm' => $form->createView(),
            ]);
        }
    }
    Ainsi que mon security.yaml:
    security:
        encoders:
            App\Entity\User:
                algorithm: argon2i
    
        # https://symfony.com/doc/current/secu...user-providers
        providers:
            # used to reload user from session & other features (e.g. switch_user)
            app_user_provider:
                entity:
                    class: App\Entity\User
                    property: username
        firewalls:
            dev:
                pattern: ^/(_(profiler|wdt)|css|images|js)/
                security: false
            main:
                anonymous: true
                guard:
                    authenticators:
                        - App\Security\LoginFormAuthenticator
                logout:
                    path: app_logout                
                # activate different ways to authenticate
    
                # http_basic: true
                # https://symfony.com/doc/current/secu...l-authenticate
    
                # form_login: true
                # https://symfony.com/doc/current/secu...gin_setup.html
    
        # Easy way to control access for large sections of your site
        # Note: Only the *first* access control that matches will be used
        access_control:
            - { path: ^/admin, roles: ROLE_ADMIN }
            # - { path: ^/profile, roles: ROLE_USER }

    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                return $guardHandler->authenticateUserAndHandleSuccess(
                    $user,
                    $request,
                    $authenticator,
                    'main' // firewall name in security.yaml
                );
    bonjour,
    tu peux virer ce bloc de code pour le remplacer par un objet de type Response( type renvoyé par register) comme $this->redirectToRoute('nom_de_la_route'):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                return $this->redirectToRoute('nom_de_la_route');// redirection vers une page de ton choix

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2018
    Messages : 2
    Par défaut
    Merci beaucoup pour ta réponse, mais ce bout de code me permet d'authentifier le user directement après son inscription, est que tu aurais une autre solution ?
    Merci

  4. #4
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 581
    Par défaut
    Dans l'exemple de la doc https://symfony.com/doc/current/secu...rd-manual-auth la méthode n'attend pas en type de retour un objet response, si tu enlèves dans ta méthode register?

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    d'après ta debug Tool barr tu arrives à te connecter avec l'utilisateur okok mais c'est au moment de la redirection où la méthode onAuthenticationSuccess de la classe LoginFormAuthenticator renvoie null alors qu'elle est censée retournée une response.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //LoginFormAuthenticator.php
    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
        {
            if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
                return new RedirectResponse($targetPath);
            }
     
           return new RedirectResponse($this->urlGenerator->generate('nom-de-la-route')); // redirection vers une route de ton choix
        }
    tu peux toutefois poster la classe LoginFormAuthenticator.
    au passage handleAuthenticationSuccess() est bien de type Response, je fais mon méa culpa par rapport à ce que j'ai dit precédemment.

Discussions similaires

  1. [débutant] erreurs après installation sous windows
    Par Lhetre dans le forum Modules
    Réponses: 2
    Dernier message: 22/06/2007, 17h03
  2. Erreur apres installation d'une bibliothèque
    Par dedepsg dans le forum Code::Blocks
    Réponses: 2
    Dernier message: 21/05/2007, 10h49
  3. Erreur apres installation Oracle 9i
    Par rabddoul dans le forum Oracle
    Réponses: 2
    Dernier message: 27/01/2007, 01h51
  4. Réponses: 6
    Dernier message: 26/07/2006, 11h07
  5. Eclipse 3.1.2 Message erreur après installation
    Par camilero dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 24/06/2006, 01h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo