Git Product home page Git Product logo

contao-doccheck-login-bundle's People

Contributors

akroii avatar tastaturberuf avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Forkers

akroii tsarma

contao-doccheck-login-bundle's Issues

Internal Server Error

Hallo Daniel,
ich habe auf einer öffentlichen Seite das Doccheck Modul eingebunden. Im Backend drücke ich auf Speichern und schließen und anschließend erhalte ich einen Internal Server Error:

"contao.fragment._contao.frontend_module.doccheck_login" has no container set, did you forget to define it as a service subscriber?

Der Fehler tritt nur in Contao 4.11.3 und nicht in 4.9.15 auf.
Kann man später ja noch beheben. Daher nur als Erinnerungsstütze.

[Anmerkung] Back-Forward Cache des Browsers macht Login in einigen Browsern unmöglich

Hallo Daniel,
ich kann jetzt mehr dazu sagen, warum der Login in einigen Browsern nicht funktioniert. Es ist nicht wirklich ein Fehler, es ist mehr eine Limitation bei einigen Browsern.
Ich habe das Problem im aktuellen Firefox (94.0.1) unter Windows 10 nachstellen können.

In der freien Wildbahn wird man selten den Login so stricken können, dass eine Target-URL seitens Doccheck ausreicht. In der Regel hat man viele verschiedene Seiten, die geschützt werden müssen. Deshalb baut man sich einen Router, auf der man den Login und eine Bestätigungsseite baut, die dann per Javascript window.location.href = "{{link_url::back}}"; den Login zur vorherigen Seite (nämlich dort wo ein Modul, Inhaltselement platziert war) wieder initiiert.
Genau hier ist aber der Fehler. Der bfcache (Back-Forward Cache) macht aber den Login nicht möglich.

Der bfcache wird von jedem Browser unterschiedlich gehandhabt. Das erklärt die Symptomatik, dass es "in einigen Browsern" funktioniert.
Ich kann es mir nur so erklären, dass der Cache des iframes ein anderer ist, als der auf der Contao Seite wo der iframe eingebunden ist. Wenn nu der Browser bei erfolgreichen Login mittels Doccheck auf die COntao Seite zurückgeworfen wird, wird man auf den Cache des iframes geworfen und nicht auf die COntao Seite an sich. Sonst würde er ja auch eine valide Session in Contao erstellen.

window.location.href = "{{link_url::back}}"; wird dich zwar auf die Seite zurückleiten wo du warst, allerdings ohne dich in eine valide Frontend-Session bzw. Frontend-Gruppe zu überführen. In dem Doccheck iframe steht dann, dass man angemeldet ist, jedoch ohne, dass man als Contao FE-Mitglied behandelt wird.

Nach einem Reload funktioniert der Login.
Die Lösung besteht eigentlich darin, dass man statt window.location.href besser window.location.replace verwenden sollte.
Ich weiß nicht ob das ein Bug ist. Bei Typo3 wird hierzu die letzte URL separat im Modul gespeichert. Man umgeht also die problematik.
Wenn es für dich kein Bug ist, kann ich das ganze mal in eine Doku + samt Workaround schreiben. Ich denke, dass die Lösung ein window.location.replace("letzte seite");ist. Die Frage ist nur, wie man die letzte Seite bekommt, ohne {{env::referer}} zu verwenden.

Wie gesagt es ist weniger ein Problem in unserem Modul, sondern eher ein Problem, dass man bei mehreren geschützten Unterseiten haben wird. Hier brauch man zwangsläufig eine "Router-Seite".

Fällt dir da spontan etwas ein?

Hier noch einige Links:
whatwg/html#5879
https://web.dev/bfcache/

Möglichkeit Parameter der Return-URL beizubehalten

Hallo Daniel,
wäre es möglich die Parameter, die von DocCheck zurückgeworfen werden beizubehalten?

Also
https://xxxxxx.de/doccheck-login.html?dc=1&uniquekey=478ac05c52477d89028a3cb315s3f077&dc_single_signon=1&login_id=XXXXXXXX&client_id=XXXXXX&state=%2Fueber-uns.html&strDcLanguage=de&intDcLanguageId=148&dc_timestamp=167145125

und nicht nur :
https://xxxxxx.de/doccheck-login.html
.. am Ende des redirects beizubehalten?
Wir möchten mit Google Analytics noch die Parameter der URL tracken.

Das müsste folgede Änderung im src/Controller/DocCheckLoginController.php sein:

-      throw new RedirectResponseException($jumpTo->getFrontendUrl());
+      throw new RedirectResponseException($jumpTo->getFrontendUrl().'?'.\Environment::get('queryString'));

So erhält man auf der jumpTo-Seite ebenfalls noch die ganzen Parameter der die von DocCheck mitkommen. Was denkst du?
Ich habe es mit dem iframe auch getestet... würde problemlos funktionieren.

Verständnisfrage zum Modul

Hallo!
Habe ich das richtig verstanden, dass über diesen Login ausschließlich ein allgemeiner Login realisiert werden kann, ohne nach dem eingeloggten DocCheck-User zu differenzieren?
Also ich kann in Contao dann keine Mitglieds-individuellen Inhalte aufbauen und per Login schützen, da ein festes Contao-Mitglied im Modul definiert wird?
Zweite Frage: notwendig auf DocCheck-Seite ist nur die Basic-Lizenz, oder? Oder gewinnt man durch ein höheres Lizenz-Modell irgendwas im Zusammenspiel mit dem Modul?

Error on login

Symfony\Component\HttpKernel\Exception\BadRequestHttpException:
Missing form field "_target_path". You probably need to adjust your custom login template.

  at vendor/contao/core-bundle/src/Security/Authentication/AuthenticationSuccessHandler.php:180
  at Contao\CoreBundle\Security\Authentication\AuthenticationSuccessHandler->decodeTargetPath(object(Request))
     (vendor/contao/core-bundle/src/Security/Authentication/AuthenticationSuccessHandler.php:154)
  at Contao\CoreBundle\Security\Authentication\AuthenticationSuccessHandler->determineTargetUrl(object(Request))
     (vendor/contao/core-bundle/src/Security/Authentication/AuthenticationSuccessHandler.php:121)
  at Contao\CoreBundle\Security\Authentication\AuthenticationSuccessHandler->onAuthenticationSuccess(object(Request), object(UsernamePasswordToken))
     (vendor/tastaturberuf/contao-doccheck-login-bundle/src/Controller/DoccheckLoginController.php:172)
  at Tastaturberuf\ContaoDoccheckLoginBundle\Controller\DoccheckLoginController->loginUser('doccheck', object(Request))
     (vendor/tastaturberuf/contao-doccheck-login-bundle/src/Controller/DoccheckLoginController.php:111)
  at Tastaturberuf\ContaoDoccheckLoginBundle\Controller\DoccheckLoginController->getResponse(object(FrontendTemplate), object(ModuleModel), object(Request))
     (vendor/contao/core-bundle/src/Controller/FrontendModule/AbstractFrontendModuleController.php:40)
  at Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController->__invoke(object(Request), object(ModuleModel), 'main', null)
     (vendor/symfony/http-kernel/HttpKernel.php:158)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 2)
     (vendor/symfony/http-kernel/HttpKernel.php:80)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 2, false)
     (vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php:85)
  at Symfony\Component\HttpKernel\HttpCache\SubRequestHandler::handle(object(HttpKernel), object(Request), 2, false)
     (vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php:81)
  at Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer->render('/_fragment?_path=_format%3Dhtml%26_locale%3Dde%26_controller%3Dcontao.frontend_module.doccheck_login', object(Request), array('ignore_errors' => false))
     (vendor/symfony/http-kernel/Fragment/FragmentHandler.php:85)
  at Symfony\Component\HttpKernel\Fragment\FragmentHandler->render(object(FrontendModuleReference), 'forward', array('ignore_errors' => false))
     (vendor/contao/core-bundle/src/Fragment/FragmentHandler.php:84)
  at Contao\CoreBundle\Fragment\FragmentHandler->render(object(FrontendModuleReference))
     (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleProxy.php:61)
  at Contao\ModuleProxy->generate()
     (vendor/contao/core-bundle/src/Resources/contao/elements/ContentModule.php:101)
  at Contao\ContentModule->generate()
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:608)
  at Contao\Controller::getContentElement(object(ContentModel), 'main')
     (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:218)
  at Contao\ModuleArticle->compile()
     (vendor/contao/core-bundle/src/Resources/contao/modules/Module.php:214)
  at Contao\Module->generate()
     (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:71)
  at Contao\ModuleArticle->generate(false)
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:536)
  at Contao\Controller::getArticle(object(ArticleModel), true, false, 'main')
     (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:377)
  at Contao\Controller::getFrontendModule('0', 'main')
     (vendor/contao/core-bundle/src/Framework/Adapter.php:44)
  at Contao\CoreBundle\Framework\Adapter->__call('getFrontendModule', array('0', 'main'))
     (vendor/fritzmg/contao-inherit-article/src/EventListener/InheritArticleListener.php:139)
  at InheritArticleBundle\EventListener\InheritArticleListener->getFrontendModule(object(PageModel), '0', 'main')
     (vendor/fritzmg/contao-inherit-article/src/EventListener/InheritArticleListener.php:114)
  at InheritArticleBundle\EventListener\InheritArticleListener->onGetPageLayout(object(PageModel), object(LayoutModel), object(PageRegular))
     (vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:253)
  at Contao\PageRegular->getPageLayout(object(PageModel))
     (vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:77)
  at Contao\PageRegular->prepare(object(PageModel))
     (vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:48)
  at Contao\PageRegular->getResponse(object(PageModel), true)
     (vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:337)
  at Contao\FrontendIndex->renderPage(object(PageModel))
     (vendor/symfony/http-kernel/HttpKernel.php:158)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:80)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:201)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (web/index.php:31)  

maybe fix by terminal42/contao-autoregistration#7?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.