33 geniale Contao-Erweiterungen, die du kennen solltest! - Contao Academy
Ergebnis 1 bis 5 von 5

Thema: Symfony Forms mit Contao verwenden - Invalid CSRF token

  1. #1
    Contao-Fan
    Registriert seit
    21.12.2009.
    Beiträge
    326

    Standard Symfony Forms mit Contao verwenden - Invalid CSRF token

    Hallo zusammen,

    in Contao 4.4.X konnte ich mit folgendem Workaround die Form Componente von Symfony innerhalb Contao verwenden:

    PHP-Code:
        /**
         * @param string $name
         *
         * @return FormBuilderInterface
         */
        
    protected function createFormBuilderForContao(string $name): FormBuilderInterface
        
    {
            return 
    $this->get('form.factory')->createNamedBuilder($nameFormType::class)
                ->
    add('REQUEST_TOKEN'RequestTokenType::class);
        } 
    Darüber hole ich mir in meinem Controller quasi den FormBuilder. Der RequestTokenType liefert mir quasi den Contao Request Token. Der Type sieht wie folgt aus:

    PHP-Code:
    class RequestTokenType extends HiddenType
    {
        
    /**
         * @var CsrfTokenManagerInterface
         */
        
    private $tokenManager;

        
    /**
         * @var string
         */
        
    private $tokenName;

        
    /**
         * RequestTokenType constructor.
         *
         * @param CsrfTokenManagerInterface $tokenManager
         * @param string                    $tokenName
         */
        
    public function __construct(CsrfTokenManagerInterface $tokenManagerstring $tokenName)
        {
            
    $this->tokenManager $tokenManager;
            
    $this->tokenName $tokenName;
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function buildView(FormView $viewFormInterface $form, array $options)
        {
            
    parent::buildView($view$form$options);

            
    $view->vars['full_name'] = 'REQUEST_TOKEN';
        }

        
    /**
         * {@inheritdoc}
         */
        
    public function configureOptions(OptionsResolver $resolver)
        {
            
    $resolver->setDefaults([
                
    'data' => $this->tokenManager->getToken($this->tokenName)->getValue(),
            ]);
        }

        
    /**
         * @return string
         */
        
    public function getName()
        {
            return 
    'request_token';
        }

    Das hatte bisher auch immer gut geklappt. Jetzt will ich unter Contao 4.7 die gleiche Vorgehensweise machen, erhalte aber beim Absenden des Formulares dann die Meldung

    Code:
    Invalid CSRF token. Please reload the page and try again.
    Was hat sich bei Contao/Symfony verändert - hat mir da jemand einen Tip? Stehe grad auf dem Schlauch

    Danke euch !
    Viele Grüße aus dem Süden
    creativx
    ---- Planung ist Ersatz des Zufalls durch den Irrtum ----

  2. #2
    Contao-Fan
    Registriert seit
    21.12.2009.
    Beiträge
    326

    Standard

    Schade... ich häng immer noch an dem Problem
    Viele Grüße aus dem Süden
    creativx
    ---- Planung ist Ersatz des Zufalls durch den Irrtum ----

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    21.769
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Naja, wird denn auch tatsächlich ein Request Token im Frontend ausgegeben?

  4. #4
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    1.847
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Wie sieht das HTML aus? Ist der REQUEST_TOKEN eine eigenständige Post-Variable?

    Wird der korrekte Token-Manager verwendet? Meines Wissens ist es nicht (mehr?) Der Standard-Service von Symfony, sondern ein eigener.

  5. #5
    Contao-Fan
    Registriert seit
    21.12.2009.
    Beiträge
    326

    Standard

    Hallo zusammen,

    sorry - ich bekomme seltsamerweise keine Mails mehr zu diesem Thema... daher meine verzögerte Antwort.

    Das Problem ist aber mittlerweile auch gelöst worden. Und ja es liegt daran, dass es nun einen eigenen Tokenmanager gibt. Für den eigens angelegten Form-Type "RequestTokenType" habe ich einen Service registriert bei dem eben jetzt der richtige Tokenmanager injected wird:

    PHP-Code:
      app.form_type.request_token:
        class: 
    App\Form\RequestTokenType
        arguments
    :
          - 
    "@contao.csrf.token_manager"
          
    "%contao.csrf_token_name%" 
    Damit funzt es. Danke für eure Hilfe - und sorry nochmal, dass ich mich nicht gemeldet habe. Muss gleich mal nach den Einstellungen schauen...
    Viele Grüße aus dem Süden
    creativx
    ---- Planung ist Ersatz des Zufalls durch den Irrtum ----

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •