Hallo ihr Lieben,
da die meisten Beiträge zu dem Thema schon älter sind oder leider unbeantwortet, wollte ich hier noch einmal nachfragen, da ich da aktuell echt stuck bin.
Problem: Wir haben einen Kunden, der seinen Kunden einen Login auf einer Seite außerhalb seines Shopware-Shops anbietet. Die geben dort ihre E-Mail-Adresse und ihr Passwort ein und werden - sofern erfolgreich - zum Shop weitergeleitet und sind dort eingeloggt. Zumindest in SW5.
In Shopware 6 kriege ich das ganze nicht ans Laufen.
$client = new Client();
$response = $client->request('POST', $this->STORE_API . '/account/login', [
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'sw-access-key' => $this->SALES_CHANNEL_TOKEN
],
'json' => [
'username' => $username,
'password' => $password,
]
]);
Nutzername und Passwort werden verschlüsselt als URL-Queries mit gegeben. Die habe ich davor schon ausgelesen und mache anschließend einen API-Call an /account/login. Die Response sieht auch richtig aus, ich kriege im Header das Context-Token und im Body folgendes:
"body": "{\"apiAlias\":\"array_struct\",\"redirectUrl\":null}"
Erst dachte ich, alles klar dann returne ich eine RedirectResponse und setze im Header das Context-Token.
if ($response->getStatusCode() == 200) {
return new RedirectResponse('/', 302, [
'sw-context-token' => $response->getHeader('sw-context-token')[0],
]);
}
Das leitet mich zwar zum Shop weiter, allerdings bin ich dort nicht eingeloggt.
In der API-Dokumentation steht:
Returns the context token. Use that as your
sw-context-token
header for subsequent requests. Redirect if getRedirectUrl is set.
Aber ich konnte bisher nirgendwo finden, was mit „if getRedirectUrl is set“ gemeint ist. Wo wird das gesetzt, während der Request?
Wäre mega nice, wenn da jemand einen Denkanstoß für mich hätte, weil ich hier seit 3 Tagen nicht weiterkomme und nicht mehr weiß, was ich noch ausprobieren kann.
Liebe Grüße