Ergebnis 1 bis 5 von 5

Thema: 4.13 Wenn angemeldet 400 Bad Request nach Routenaufruf

  1. #1
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard 4.13 Wenn angemeldet 400 Bad Request nach Routenaufruf

    Guten Abend miteinander,

    ich verwende die Contao-Version 4.13 und versuche mittels eines sendBeacon die Zeit des Nutzers auf der Webseite festzuhalten. Mit der vorherigen Contao-Version 4.4.x hat das problemlos funktioniert, aber aktuell komme ich leider mit meinem Wissen nicht weiter. Mein Code sieht wie folgt aus:

    Controller:
    PHP-Code:
    namespace App\Controller;

        use 
    Contao\Controller;
        use 
    Contao\FrontendUser;
        use 
    Doctrine\DBAL\Connection;
        use 
    Symfony\Component\HttpFoundation\RedirectResponse;
        use 
    Symfony\Component\HttpFoundation\Response;
        use 
    Symfony\Component\HttpKernel\Attribute\AsController;
        use 
    Symfony\Component\Routing\Annotation\Route;
        use 
    Symfony\Component\Security\Core\Security;
        use 
    Terminal42\ServiceAnnotationBundle\Annotation\ServiceTag;

        class 
    TimeController
        
    {
            private 
    $connection;
            private 
    $security;
        
            public function 
    __construct(Security $securityConnection $connection)
            {
                
    $this->security $security;
                
    $this->connection $connection;
            }
            
            
    /**
            * @Route("/time/", name=TimeController::class, defaults={"_scope": "frontend"})
            */ 
            
    public function trackAction()
            {
                
    // Get current front end user
                
    $user $this->security->getUser();

    var_dump($user);
                
                return new 
    Response("Test");
            }
        } 
    JavaScript-Code in Template-Datei:
    Code:
    <script>
    	var data = { "foo": "bar" };
    	var text = JSON.stringify(data);
    	
    	navigator.sendBeacon('/time/', text);
    </script>
    services.yaml:
    Code:
    services:
        _defaults:
            autowire: true
            autoconfigure: true
            public: false
    
        App\:
            resource: ../src
            exclude: ../src/{Entity,Migrations,Model,Resources,Tests,Widget}
        
        App\Controller\:
            resource: ../src/Controller
            tags: ['controller.service_arguments']
            public: true
    routes.yaml:
    Code:
        resource: ../src/Controller
        type: annotation
        
    app.controller.time:
        path: /time/
        defaults:
            _controller: 'App\Controller\TimeController::trackAction'
            _scope: frontend
            _token_check: false
    Rufe ich die URL mit dem JavaScript-Code auf, ohne das ich eingeloggt bin, dann bekommt der sendBeacon einen 200er Status und ich bekomme "Test" als Antwort zurück. Wenn ich mich jedoch zuerst als Benutzer im Frontend anmelde und dann die URL aufrufe, bekomme ich ohne Änderung im Code einen 400er Bad Request Status als Antwort. Hat sich da etwas bei der Frontend-Anmeldung in Contao 4.13 geändert, das hier greift?

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

    Standard

    navigator.sendBeacon() sendet einen POST Request. Da du eingeloggt bist verlangt Contao dann einen Request Token zum Schutz vor Cross Site Request Forgery.

    Du müsstest also entweder einen gültigen CSRF Token mit schicken, oder den CSRF Schutz für deine Route deaktivieren, falls da nie persönliche bzw. sensitive Daten gesendet werden.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    Danke für die Antwort Spooky, ich hatte noch den Debug-Modus angemacht und mir die Response angeschaut, da stand eben jene Fehlermeldung drin. Ist mir aber leider erst nachdem Posten des Threads aufgefallen. Aber müsste der Token-Check nicht schon mit dem Code in der routes.yaml deaktiviert sein?

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

    Standard

    Du hast deine Route doppelt definiert. Einmal via Annotation und einmal direkt in der routes.yaml. Du musst dich für eine Variante entscheiden und dort dann entsprechend den Token Check deaktivieren (bei der Annotation hast du das nämlich nicht gemacht).
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    17.01.2020.
    Beiträge
    111

    Standard

    Das war's, danke! Dann muss ich nochmal in die Dokumentation schauen, wie genau das mit der Route ist.

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
  •