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:
JavaScript-Code in Template-Datei: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 $security, Connection $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");
}
}
services.yaml:Code:<script> var data = { "foo": "bar" }; var text = JSON.stringify(data); navigator.sendBeacon('/time/', text); </script>
routes.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
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?Code:resource: ../src/Controller type: annotation app.controller.time: path: /time/ defaults: _controller: 'App\Controller\TimeController::trackAction' _scope: frontend _token_check: false

Zitieren