Je länger, je mehr glaube ich einen Fehler mit Contao 5 gemacht zu haben. Hätte ich doch lieber Contao 4.9 installiert...
Ich habe ein eigenes Formular erstellt und da möchte ich POST-Daten an eine Contao Seite senden.
Nun möchte Contao ein Token, um sicherzustellen, dass keine POST anfragen von Extern erfolgen. Finde ich gut und wäre auch OK, wenn es einfach umsetzbar wäre...
Wie komme ich zu diesem Token?
Ich habe alles Mögliche versucht: Aus Verzweiflung habe ich sogar ChatGPT angefragt.... Keine Chance... (ich weiss auch nicht, ob ChatGPT Contao 5 schon kennt).
OderPHP-Code:
<input type="hidden" name="REQUEST_TOKEN" value="{{request_token}} ">
## Fehler: Kein Request-Token übermittelt
OderPHP-Code:
<input type="hidden" name="REQUEST_TOKEN" value="{{ @system.request_token }}">
## Fehler: Kein Request-Token übermittelt
oderPHP-Code:
<?php
## Quelle: ChatGPT
## -----------------------
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Contao\CoreBundle\Framework\ContaoFrameworkInterface;
/** @var ContaoFrameworkInterface $framework */
$framework = $GLOBALS['container']['contao.framework'];
/** @var CsrfTokenManagerInterface $tokenManager */
$tokenManager = $framework->getAdapter(CsrfTokenManagerInterface::class);
$requestToken = $tokenManager->getToken('contao_frontend')->getValue();
?>
<input type="hidden" name="REQUEST_TOKEN" value="<?php echo $requestToken?>">
## Fehlermeldung:
## request.CRITICAL: Uncaught PHP Exception Error: "Call to a member function getAdapter() on null" at XXXXXX/templates/stepper_start.php line 9 {"exception":"[object] (Error(code: 0): Call to a member function getAdapter() on null at XXXXXX/templates/stepper_start.php:9)"} []
Wäre froh um ein feedback.PHP-Code:
<?php
## Quelle: ChatGPT
## -----------------------
use Contao\CoreBundle\Routing\ScopeMatcher;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
use Symfony\Component\Security\Csrf\TokenStorage\TokenStorageInterface;
use Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator;
/** @var ScopeMatcher $scopeMatcher */
$scopeMatcher = $GLOBALS['container']['contao.routing.scope_matcher'];
/** @var CsrfTokenManagerInterface $tokenManager */
$tokenManager = $GLOBALS['container']['security.csrf.token_manager'];
/** @var TokenStorageInterface $tokenStorage */
$tokenStorage = $GLOBALS['container']['security.csrf.token_storage'];
/** @var TokenGeneratorInterface $tokenGenerator */
$tokenGenerator = $GLOBALS['container']['security.csrf.token_generator'];
// Prüfen, ob das Formular gesendet wurde und das Request Token vorhanden ist
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$scopeMatcher->isBackendRequest()) {
$requestToken = $tokenStorage->getToken('contao_csrf_token')->getValue();
$submittedToken = $_POST['REQUEST_TOKEN'] ?? '';
// Validiere den Request Token
if (!$tokenGenerator->isTokenValid(new CsrfToken('contao_csrf_token', $submittedToken))) {
die('Ungültiger Request Token!');
}
} else {
$requestToken = $tokenManager->getToken('contao_csrf_token')->getValue();
}
?>
<input type="hidden" name="REQUEST_TOKEN" value="<?php echo $requestToken?>">
## Fehlermeldung:
## request.CRITICAL: Uncaught PHP Exception Error: "Call to a member function getToken() on null" at XXXXXX/templates/stepper_start.php line 31 {"exception":"[object] (Error(code: 0): Call to a member function getToken() on null at XXXXXX/templates/stepper_start.php:31)"}
Wäre auch froh um eine Anleitung, wie man diese Token-Anfrage deaktivieren kann.
Wo ist neu in Contao 5 die app/config/config.yml ??
Auch das finde ich nicht mehr....
Lesezeichen