login Problem unter cypress
Moin,
mache mit gerade mit cypress vetraut. In der Isotope Demo (lokal gehostet) bekomme ich beim Loginversuch diese Fehlerseite:
Zitat:
Ungültiges Anfrage-Token
Was ist das Problem?
Das Request-Token konnte nicht validiert werden.
Wie kann ich das Problem lösen?
Bitte klicken Sie hier und versuchen Sie es erneut. Verwenden Sie nicht die Zurück-Schaltfläche Ihres Browsers.
Weitere Informationen
Der Fehler tritt bei einer POST-Anfrage ohne gültiges Request-Token auf. In Contao 2.10 wurde die Referer-Prüfung durch ein Request-Token-System ersetzt. Wenn das Problem anhält, verwenden Sie eventuell eine inkompatible Drittanbieter-Erweiterung oder haben Ihre Contao-Installation nicht vollständig aktualisiert.
Besuchen Sie die
Contao-Supportseite für weitere Informationen.
Laut Entwicklerhandbuch wird aber bei nicht authentifizierten Anwendern keine CSRF Prüfung gemacht:
Zitat:
Providing CSRF protection for users that are not authenticated against the app does not make any sense. So if you visit a regular Contao page with a form placed on it, you will not necessarily see any cookies being set in your browser. Only if you are authenticated in such a way that the browser will automatically send authentication information along without any user interaction (e.g. any cookies or basic authentication via Authorization headers), CSRF protection is required. So don’t get fooled by the cookies not being present all the time, Contao is actually very smart about them to improve HTTP cache hits.
https://docs.contao.org/dev/framewor...ns/#body-inner
Wenn die isotope demo seite ohne cypress läuft, gelingt der login.
Wo ist da jetzt das Problem?
Habe auch versucht, ein CSRF Token im header des responses aus dem cypress request zu finden, da ist keines (was ja laut Entwicklerhandbuch auch stimmig ist). Warum dann dennoch die Fehlermeldung kommt, erschliesst sich mir nicht.
Die Demo läuft unter contao 4.13 und PHP 8.1
teilweise gelöst: Login Problem unter cypress
In der .env.local setze:
COOKIE_ALLOW_LIST=PHPSESSID,csrf_https-contao_csrf_token,csrf_contao_csrf_token,trusted_d evice,REMEMBERME
https://docs.contao.org/dev/referenc...kie-allow-list
Das verhindert den CSRF Token Fehler in der prod-Umgebung. Für APP_ENV=dev habe ich leider noch keine Lösung gefunden.
Es gibt einen slack thread dazu, der mich auf die allow_list gebracht hat https://contao.slack.com/archives/CK...61810787788719 , so ganz schlau werde ich aus dem Ganzen noch nicht.
cypress tests für die isotope demo
https://github.com/Ernestopheles/isotopeDemo
Bin ich da auf dem richtigen Weg?
1. Ich schreibe Tests für die demo, um meine Anpassung am isotope Core (bezüglich contao 5) zu testen.
2. Vielleicht können die Tests ja auch für andere nützlich sein? Deshalb pushe ich sie in das demo rep. Würde das dann, vorausgesetzt PR und gemerged, eine neue Version der .zip geben? Und wir könnten in die Readme eine Installationsanweisung für cypress einfügen?
Frontend Tests via Cypress fertig
https://github.com/Ernestopheles/isotopeDemo
Die sollten eigentlich ausreichen, oder?
Welche backend tests sind vonnöten für meine PR?
Achtung bei der Arbeit mit lokalen repositories in einer Abhängigkeits-Kette
Konkret habe ich lange gesucht, warum meine lokale Version des isotope-core in meiner Demo-Webseite nicht herangezogen wurde:
Normalerweise denkt mensch ja, dass ein composer.json Eintrag wie hier genügt:
Code:
{ "type": "project",
"repositories": [
{
"type": "path",
"url": "../isotope/isotopeDemo"
}
],
"require": {
"contao/calendar-bundle": "4.13.*",
"contao/comments-bundle": "4.13.*",
"contao/conflicts": "*@dev",
"contao/faq-bundle": "4.13.*",
"contao/listing-bundle": "4.13.*",
"contao/manager-bundle": "4.13.*",
"contao/news-bundle": "4.13.*",
"contao/newsletter-bundle": "4.13.*",
"isotope/isotope-demo": "@dev"
},
"extra": {
"public-dir": "public",
"contao-component-dir": "assets"
},
"scripts": {
"post-install-cmd": [
"@php vendor/bin/contao-setup"
],
"post-update-cmd": [
"@php vendor/bin/contao-setup"
]
},
"config": {
"allow-plugins": {
"contao-components/installer": true,
"php-http/discovery": true,
"contao-community-alliance/composer-plugin": true,
"contao/manager-plugin": true,
"isotope/isotope-demo": true
}
}
}
Denn damit sage ich Composer, dass für meine Demo-Webseite die lokale Entwicklungsversion von Isotope-demo genommen werden soll.
Diese wiederum hat diese composer.json:
Code:
{ "name": "isotope/isotope-demo",
"description": "Demo Version of Isotope eCommerce",
"homepage": "https://isotopeecommerce.org/en/demo.html",
"keywords":["contao", "isotope"],
"type": "composer-plugin",
"license": "LGPL-3.0-or-later",
"version": "9",
"authors":[
{
"name": "Isotope Workgroup",
"homepage": "https://isotopeecommerce.org/en/team.html"
}
],
"support": {
"issues": "https://github.com/isotope/demo/issues",
"source": "https://github.com/isotope/demo"
},
"repositories": [
{
"type": "path",
"url": "../isotopeCore"
}
],
"require": {
"php": "^7.4 || ^8.0",
"isotope/isotope-core": "@dev",
"composer-plugin-api": "^1.1 || ^2.0",
"contao/manager-bundle": "4.13.*",
"terminal42/contao-easy_themes": "^3.0",
"terminal42/contao-changelanguage": "^3.1"
},
"require-dev": {
"contao/manager-plugin": "^2.7",
"composer/composer": "^1.9"
},
"conflict": {
"contao/manager-plugin": "<2.0 || >= 3.0"
},
"autoload": {
"psr-4": {
"Isotope\\Demo\\": "src/"
}
},
"extra": {
"class": "Isotope\\Demo\\Composer\\Plugin",
"contao-manager-plugin": "Isotope\\Demo\\ContaoManager\\Plugin"
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"allow-plugins": {
"contao-components/installer": true,
"php-http/discovery": true,
"contao/manager-plugin": true,
"contao-community-alliance/composer-plugin": true,
"dealerdirect/phpcodesniffer-composer-installer": true
}
}
}
und verwendet wiederum selber eine lokale Entwicklungsversion des isotope-core. (Die Versionsnummer habe ich nur zu Prüfzwecken geändert.)
Nun - so habe ich gedacht, sei alles paletti, aber Pustekuchen: Composer überträgt die Anweisung, isotope-core aus dem path zu nehmen, zwar korrekt in die composer.lock aber nur in die von isotope-demo. Die composer.lock meiner Demoseite hat einen solchen Vermerk nicht, mit der Folge, dass meine Demoseite mit der Entwicklungsversion gemäß packagist läuft.
Merke: Alle Abhängigkeiten mit lokaler Ablage müssen - bis auf die unterste Abhängigkeits-Ebene - "oben" vermerkt werden!
PR C4 002, 004 und 005 erstellt
Ich hoffe, dass ich damit die besprochenen Änderungen richtig umgesetzt habe. Wenn nicht, ok, ich lerne gerne dazu.
https://github.com/isotope/core/pull/2490
https://github.com/isotope/core/pull/2494
https://github.com/isotope/core/pull/2495
P.S. Die Änderung der Abhängigkeiten in der composer.json habe ich noch nicht eingebaut (betrifft PR 005), weil ich das gerne noch mit euch besprechen möchte.