GraphQL Authentication überschreiben

Hallo,

ich nutze das GraphQL Base Modul und möchte die Authentication Klasse (source/modules/oe/graphql-base/src/Service/Authentication.php) des Moduls überschreiben.

Anhand des Developer Doku Artikels “OVERRIDE EXISTING OXID ESHOP FUNCTIONALITY” habe ich folgendes gemacht:

  • Modul erstellt
  • in der metadata.php meine Klasse angegeben:
    'extend' => [
        \OxidEsales\GraphQL\Base\Service\Authentication::class => \<myvendor>\<modulename>\GraphQL\Base\Service\Authentication::class
    ],
  • im Konstruktor meiner Klasse wie folgt extended:
class Authentication extends Authentication_parent

und die funktion isLogged() versucht zu überschreiben:

    /**
     * @throws InvalidToken
     */
    public function isLogged(): bool
    {
        $logger = Registry::getLogger();
        $logger->warning('TEST ...');

        return parent::isLogged();
    }

Die Funktion isLogged() in der Parent Klasse des GraphQL Moduls wird aufgerufen, dort kann ich via xdebug einen Breakpoint setzen der aufgerufen wird. Die Funktion in meiner Klasse wird hingegen nicht aufgerufen. Was mache ich hier falsch? Würde mich über Hinweise freuen.

Noch kurz zu meinem Modul:
Das Modul ist im Backend als aktiv sichtbar, die Config ist mit vendor/bin/oe-console oe:module:install-configuration gesetzt. Habe darin einen “BeforeAuthorization” EventSubscriber implementiert, der funktioniert einwandfrei.

Vielen Dank und viele Grüße

Moin @kontrollfeld

erster Tipp von mir für Developer mit technischen Background und Detailfragen lohnt es sich bei Slack beizutreten. Du findest den Slack Channel unter Community (DE) • OXIDforge dort hättest auch direkten Kontakt zu Personen die GraphQL Module für OXID entworfen.

Zweitens für GraphQL funktioniert diese Form von Überladung nach OXID eShop Dokumentation wahrscheinlich nicht. Zum Verständnis bei GraphQL handelt es sich um eine Modulimplementation und dem OXID eShop Framework wird die Klasse Authentication welche Du überladen möchtest nicht bekannt gemacht in der Form wie Du Sie erweitern möchtest, dies verrät ein Blick in die metadata.php vom GraphQL Basemodul.

Ich würde ansonsten dort die Klasse unter controller erwarten graphql-base-module/metadata.php at v5.2.0 · OXID-eSales/graphql-base-module · GitHub damit Deine beschriebene Art der Überladung klappen könnte.

Stattdessen findest Du die Klasse Authentication in der services.yaml Datei graphql-base-module/services.yaml at v5.2.0 · OXID-eSales/graphql-base-module · GitHub wieder. Dies bedeutet für Dich wäre folgender Teil in der Dokumentation Service Container — OXID eShop developer documentation 6.3.0 documentation relevant wie man einen Service durch einen eigenen Service ersetzt.

Quellen welche Du Dir angucken könntest wie man im OXID eShop Framework einen Service überschreibt bzw. bei Symfony findest Du unter

Ich hoffe ich konnte Dir soweit aufzeigen wo Du ansetzen könntest und Du Deinem Ziel weiterkommst um die Authentifikationsklasse Methode Deinen Wünschen entsprechend zu modifizieren.

Viele Grüße,
Tim

Moin @indianer3c ,

habe ganz vielen Dank für Deine schnelle und vor Allem ausführliche Antwort und die ganzen Hinweise! Bin dem Slack Channel schon beigetreten.

Da wäre ich von allein nicht drauf gekommen dass die Klasse in der metadata.php des zu erweiternden Moduls gelistet sein muss um sie über den Weg erweitern zu können. Guter Hinweis.

Die Symfony Services sind mir bekannter, damit komme ich zurecht. Ich werde das die Tage mal ausprobieren und hier an dieser Stelle nochmal Feedback geben. Vielleicht stößt ja nochmal jemand anderes auf diesen Eintrag. In Zukunft werde ich die Developer Fragen dann im Slack Channel stellen.

Vielen Dank und viele Grüße

Markus

1 Like

Moin Markus :slight_smile:

gerne.

Deine Fragen kannst Du auch im Forum stellen.

Bezüglich GraphQL weil es sehr Neu ist - wird hier im Forum sehr wenig bis gar keine Erfahrung vorhanden sein. Manche Fragen gehen so weit ins Detail, dass dies schon strukturell ist und nur ein Entwickler beantworten kann welcher am Design Prozess der GraphQL für OXID beteiligt war. Dies war mein Punkt.

Gerne kannst Du hier über Deinen Erfahrungswert berichten, dafür ist das Forum da. Dies hilft letztendlich allen weiter die später vor gleicher Anforderung stehen sollten.

Viele Grüße,
Tim

1 Like

Moin Tim,

jetzt habe ich doch nochmal eine Frage, die vielleicht auch allgemein genug ist um im Forum erwähnt zu werden. Das GraphQL ist ja auch ein Modul und nicht Teil des Shop Cores selbst. In dem von Dir genannten Link Service Container — OXID eShop developer documentation 6.3.0 documentation geht es ja darum Shop Services zu ersetzen über die configurable_services.yaml.

Wäre denn in meinem Fall der Authentication Service des graphql-base-moduls auch als “system services” bzw. “eshop core service” zu verstehen, auch wenn es ein service eines Moduls (ausserhalb des cores ) ist?

Vielen Dank und viele Grüße

Markus

Moin Markus :slight_smile:

dies müsste ich selber ausprobieren, würde aber vermuten das über configurable_services.yaml überschreiben musst. Weil ich die Dokumentation so verstehe, dass eine Variante um eigene Services anzulegen und eine Variante um bestehende Services zu überschreiben.

Viele Grüße,
Tim