Contao-Camp 2024
Ergebnis 1 bis 10 von 10

Thema: Symfony Forms mit Contao verwenden - Invalid CSRF token

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

    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
    445

    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
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    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
    2.020
    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
    445

    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 ----

  6. #6
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.494
    User beschenken
    Wunschliste

    Standard

    Müsste man nun 2 Versionen bauen, eine für Contao 4.4 und eine ab Contao 4.7?
    Oder gibt es eine Möglichkeit das die Erweiterung in beiden funktioniert?
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Du könntest auch RequestToken::get() verwenden. Gibt es ja erst in Contao 5.0 nicht mehr

  8. #8
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    539

    Standard

    könnte man vllt beim laden der yml-Dateien zuerst abfragen welche Contao Version man verwendet und dann die richtige Datei laden?
    Grüße
    Alex

  9. #9
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.494
    User beschenken
    Wunschliste

    Standard

    werd ich mal als zweite Variante probieren.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  10. #10
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.494
    User beschenken
    Wunschliste

    Standard

    Jo, so gehts auch und gefällt mir auch besser.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

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
  •