Loginklasse von Shopware6 nicht zu finden

Hallo Leute,
suche seit Stunden denjenigen Code Teil, in welchem PHP den Abgleich des Benutzernamens und des Passwortes mit dem in der Datenbank hinterlegten Hash abgleicht, werde aber nicht fündig. Weiß jemand die Klasse?

Du suchst

  • den AuthController in den storefront controllern
  • der ruft die LoginRoute im core package auf
  • der wiederum nutzt den AccountService

Einfach mal durchhangeln.

Viele Grüße

Ich meine nicht die Customer Authentifizierung sondern die Admin Abfrage im Backend

Hier gehst du ähnlich vor:

  • schau dir den request beim Login in der Entwicklerkonsole deines Browsers an
  • suche in den Admin Controllern die entsprechende route
  • hangel dich dann tiefer durch die services

Viele Grüße

Es gibt nur einen AdminController. Welche Route? Da wird nur eine static/js/app.js?1707150179 aufgerufen. Was soll ich damit anfangen. Und was meinst du mit Services? Wenn ich nach password oder username oder LoginController suche, findet sich auch nix brauchbares. Sonst hätte ich diesen Post erst gar nicht veröffentlicht.

Was mich maßlos verwirrt: Wenn ich in der Datei UserEntity.php einen Breakpoint auf die Methode

    public function getUsername(): string
    {
        return $this->username;
    }

bleibt nix stehen! Der Code wird gar nicht abgearbeitet: Durch getLocaleId() weiß ich, dass dadurch eigentlich die Admindatren abgefragt werden sollten. Werden sie aber definitiv nicht!

@EikeBrandtWarneke hat es eigentlich ziemlich nett und gut erklärt, wie man das Backtrackt.

  • Im Network-Tab den Login-Request angeschaut. Route ist /api/oauth/token

  • Nach der Route gesucht. Siehe da, Authentifizierungs-Service ist hier: Resources/app/administration/src/core/service/login.service.ts

  • Und der Controller hier: Framework/Api/Controller/AuthController.php

  • Der Login selber geht dann über oAuth, im speziellen über das League\OAuth2-Paket

  • Die UserEntity wird erst nach dem Login abgerufen.

Habe durch folgenden Code eruieren können, dass sowohl der korrekte Username als auch das korrekte Passwort dem $request übergeben wurde, Trotzdem werde ich nicht eingeloggt. Es sind dieselben Credentials, die von einer 1:1 Kopie des Shop_A auf eine Subdomain zu Shop_B genommen werden. Keine Error Meldung, nur ein Stillstand der Seite. Weiß jemand, wie ich dem Problem auf die Spur kommen könnte?

#[Route(path: '/api/oauth/token', name: 'api.oauth.token', defaults: ['auth_required' => false], methods: ['POST'])]
    public function token(Request $request): Response
    {
        $response = new Response();
        ob_flush();
        ob_start();
        var_dump($request->getContent());
        file_put_contents("dump.txt", ob_get_flush());
        ob_end_clean();
  • Dev-Environment aktivieren
  • Network-Tab auf fehlerhafte Requests checken
  • Logfiles checken

In /vendor/shopware/core/Framework/Api/Controller/Authcontroller wird der Methode token ein Request Objekt übergeben, welches die Logindaten bereits enthält. Folgende Codezeile
$response = $this->authorizationServer->AuthController($psr7Request, $psr7Response);
führt dann den Loginprozess über ein Token durch. Der Code, durch welchen das Request Objekt erzeugt wird, konnte hier aufgezeigt werden