Ich hätte gedacht dass der HttpClient den nötigen BearerToken automatisch erzeugt, aber das scheint nicht der Fall zu sein. Hier meine “custom/plugins/MeinPlugin/src/Resources/app/storefront/src/main.js”:
import HttpClient from 'src/service/http-client.service';
var loadEnd = function(responseText) {
console.log(responseText);
};
var httpClient = new HttpClient(window.accessKey, window.contextToken);
httpClient.post('/api/v1/myvendor/myaction', null, loadEnd);
Der Request enthält zwar die beiden Kopfzeilen “sw-access-key” und “sw-context-token”, bekommt dann aber die Antwort “401 Unauthorized” bzw. im JSON so etwas:
Lässt sich über JS die Authentifizierung überhaupt realisieren?
Um meine Frage selbst zu beantworten - ich kann im Frontend wohl besser die Sales Channel API verwenden, die gar keine Authentifizierung benötigt. Damit funktioniert der JS Code von oben ohne weiteres. Im Controller musste ich nur die Route anders setzen:
connection = $connection;
}
/**
* @Route("/sales-channel-api/v{version}/myvendor/myaction", name="sales-channel-api.action.myvendor.myaction", methods={"POST"})
* @param Request $request
* @param Context $context
* @return JsonResponse
* @throws \Doctrine\DBAL\DBALException
*/
public function myaction(Request $request, Context $context): JsonResponse
{
// do something
$cart = $this->connection->fetchAssoc("select token, name, price, created_at from cart order by rand() limit 1");
return new JsonResponse([$cart['created_at'], $cart['price']]);
}
}
Ich hätte gedacht dass der HttpClient den nötigen BearerToken automatisch erzeugt…
Grüße, Ansgar
Da eine aussagekräftige Dokumentation zum Bearer Token Access fehlt und damit das für andere Kollegen eventuell auch intreressant wäre, gebe ich mein Wissen zum Besten:
Das sind komplett andere Bereiche das eine ist Frontend deins ist Admin. Du solltest einen eigenen Service anlegen und dort dann die getBasicHeaders methode verwenden. Und diesen dann injecten