Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony2.8][FOSUB] Jeton CSRF invalide en prod

Aucun fichier de session trouvé sur le serveur.

Sujet résolu
    22 mars 2016 à 18:36:40

    Hellow,

    Après quelques semaines de développement d'un site, j'ai déployé une beta de celui-ci via Capifony et DoctrineMigrations.

    La plupart des tests avaient déjà été effectués en local. Sauf qu'une fois sur le serveur en prod, je me retrouve avec une erreur à l'inscription : "Le jeton CSRF est invalide. Veuillez renvoyer le formulaire.". Erreur commune, sauf qu'ici je n'ai pas override la vue du formulaire d'inscription, le jeton csrf est bien dans la source html retournée par le serveur, généré par le {{ form_end(form) }} présent dans la vue par défaut présente dans le FOSUserBundle.

    Afin d'éclaircir ce qui est effectué sur le formulaire de base de FOSUserBundle, voici ce qui a été fait :

    app/config/config.yml :

    # FOS\UserBundle configuration
    fos_user:
        db_driver:     orm
        firewall_name: main
        user_class:    UD\UserBundle\Entity\User
        registration:
            form:
                type: UD\UserBundle\Form\RegistrationType
        profile:
            form:
                type: UD\UserBundle\Form\ProfileType

    src/UD/UserBundle/Form/RegistrationType.php :

    namespace UD\UserBundle\Form;
    
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    
    class RegistrationType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            // ajouts de différents champs $builder->add(...)->add(...)...;
        }
    
        public function getParent()
        {
            return 'FOS\UserBundle\Form\Type\RegistrationFormType';
        }
    
        public function getBlockPrefix()
        {
            return 'udsite_user_registration';
        }
    
        public function getName()
        {
            return $this->getBlockPrefix();
        }
    }

    Et c'est à peu près tout ce qu'il y a à voir concernant ce soucis. J'ai ajouté une contrainte à l'inscription avec un override de validation.xml, et un EventListener sur l'inscription si elle est complétée pour faire certains traitements.

    Bref, si jamais vous vous posez la question la vue du formulaire d'inscription affichée est bien celle par défaut :
    vendor\friendsofsymfony\user-bundle\Resources\views\Registration\register_content.html.twig :

    {% trans_default_domain 'FOSUserBundle' %}
    
    {{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register'}}) }}
        {{ form_widget(form) }}
        <div>
            <input type="submit" value="{{ 'registration.submit'|trans }}" />
        </div>
    {{ form_end(form) }}

    D'avance merci, là je sèche un peu.

    Edit : J'y pense mais afin de conserver les sessions d'un déploiement à l'autre dans la config du déploiement via Capifony /sessions est inclus dans shared_children. Et dans app/config/config.yml il y a :

        session:
            handler_id:  session.handler.native_file
            save_path: "%kernel.root_dir%/sessions/"

    J'ai comme l'impression qu'il y a un soucis avec ça et que les sessions ne sont pas écrites. Je précise qu'il n'y a rien dans le log app/logs/prod.log. J'ai tenté de passer Monolog en level: debug mais ça ne fait rien de plus, rien dans le log. Et je confirme qu'aucun fichier de session n'existe dans app/sessions.

    Edit² : Solution : Pensez à chmod dans le dossier shared si vous utilisez Capifony avec des shared_children, et non le lien symbolique...

    -
    Edité par Harest 23 mars 2016 à 2:22:45

    • Partager sur Facebook
    • Partager sur Twitter

    [Symfony2.8][FOSUB] Jeton CSRF invalide en prod

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown