Hallo zusammen,
wir setzen Business Essentials ein, da wir einen B2B-Shop haben und nur nach Login der Shop sichtbar sein soll. Leider haben wir dabei ein Problem mit dem Login. Der Support von Shopware hat mir leider nicht weitergeholfen, da der Fehler nicht 100%ig reproduzierbar ist.
Vielleicht kann mir hier jemand einen Tipp geben.
Und zwar äußert sich der Fehler so, dass man sich einloggt und statt dass man auf die Home-Seite weitergeleitet wird, man wieder auf der Loginseite landet. So als hätte man die Seite einfach aktualisiert. Es wird kein Fehler angezeigt. Wenn es ganz schlimm läuft, dann muss man es fünf Mal hintereinander versuchen sich einzuloggen. Oder auch noch häufiger. Toll für die Kunden ist das nicht.
Ich habe mich an den Support gewandt und wurde abgewiesen. Also habe ich mal genauer in den Code vom Business Essentials-Plugin eingearbeitet.
Das Problem bekomme ich mittlerweile auch reproduziert, wenn auch nicht zu 100% zuverlässig. Wenn ich mich im Englischen Sprachshop immer wieder ein- und auslogge, funktioniert der Login irgendwann nicht. Und genau den Fall habe ich untersucht.
Dabei bin ich auf die Funktion „checkShopAccess“ in der Datei Subscriber/FrontendDispatch.php gestoßen. Wenn der Login nicht funktioniert, trifft folgende Bedingung zu:
!$accessAllowed && $request->getRequestUri() == ‚/en/‘
Er versucht nach einem erfolgreichen Login des Kunden, den Kunden auf das „home“ weiterzuleiten. Leider stellt Business Essentials dann fest, dass der Kunde keine Berechtigung dazu hat und leitet wieder zurück auf die Loginseite.
Wenn der Login funktioniert, ist $accessAllowed == true
Ich habe weiter geforscht und gesehen, dass bei dem Request die Kundengruppe des Kunden bei „EK“ bleibt, weswegen der Zugang verweigert wird.
Im Shop Context wird in dem Fall, in dem der Login funktioniert, die Kundengruppe aus der Session geholt. Wenn es nicht klappt, dann muss er die Kundengruppe immer aus dem Shop holen, die dann folglich nicht stimmt.
Das Ergebnis ist, dass man auf den PrivateLogin-Controller weitergeleitet wird und man keine Info bezüglich des Problems erhält.
Da es meistens funktioniert und nur manchmal nicht, gehe ich hier von einer race condition aus.
Im Fehlerfall ist also zum Zeitpunkt der Prüfung „sUserGroup“ in der Session nicht gesetzt.
Ist es irgendwie möglich, dass der Wert der Session in manchen Fällen zu spät gesetzt wird?
Was ich jetzt suche ist ein sicherer Code, den ich in der Funktion „checkShopAccess“ im Code von Business Essentials einfügen kann, der vor dem Holen des Shop Context dafür sorgt, dass der benötigte Wert in der Session richtig gesetzt ist, falls er gesetzt werden darf.
Kennt sich da jemand aus?
Von Seiten Shopware Support, bekomme ich hier leider keine Hilfe.
Viele Grüße,
Conny