diff --git a/.changeset/tricky-poets-strive.md b/.changeset/tricky-poets-strive.md new file mode 100644 index 000000000..24657b31f --- /dev/null +++ b/.changeset/tricky-poets-strive.md @@ -0,0 +1,5 @@ +--- +"vue-demo-store": minor +--- + +Add server routing to handle login as a customer option diff --git a/templates/vue-demo-store/server/apiBuilder.ts b/templates/vue-demo-store/server/apiBuilder.ts index 3f13d8113..e60d21ddf 100644 --- a/templates/vue-demo-store/server/apiBuilder.ts +++ b/templates/vue-demo-store/server/apiBuilder.ts @@ -15,4 +15,4 @@ const apiClient = createAPIClient({ baseURL: shopwareEndpoint, }); -export default apiClient; +export { shopwareEndpoint, shopwareAccessToken, apiClient }; diff --git a/templates/vue-demo-store/server/routes/account/login/imitate-customer.ts b/templates/vue-demo-store/server/routes/account/login/imitate-customer.ts new file mode 100644 index 000000000..26ec2fbc3 --- /dev/null +++ b/templates/vue-demo-store/server/routes/account/login/imitate-customer.ts @@ -0,0 +1,38 @@ +import { createAPIClient } from "@shopware/api-client"; +import type { operations } from "#shopware"; +import { shopwareAccessToken, shopwareEndpoint } from "../../../apiBuilder"; + +export default defineEventHandler(async (event) => { + const body = await readBody(event); + if (!body.customerId || !body.token || !body.userId) { + await sendRedirect(event, "/", 400); + return; + } + const apiClient = createAPIClient({ + accessToken: shopwareAccessToken, + baseURL: shopwareEndpoint, + }); + + await apiClient.invoke( + "imitateCustomerLogin post /account/login/imitate-customer", + { + body: { + customerId: body.customerId, + token: body.token, + userId: body.userId, + }, + }, + ); + + if (!apiClient.defaultHeaders["sw-context-token"]) { + await sendRedirect(event, "/", 400); + return; + } + setCookie( + event, + "sw-context-token", + apiClient.defaultHeaders["sw-context-token"], + ); + + await sendRedirect(event, "/account", 200); +}); diff --git a/templates/vue-demo-store/server/routes/sitemap.xml.ts b/templates/vue-demo-store/server/routes/sitemap.xml.ts index 5dda99695..e1bb93c4a 100644 --- a/templates/vue-demo-store/server/routes/sitemap.xml.ts +++ b/templates/vue-demo-store/server/routes/sitemap.xml.ts @@ -1,7 +1,7 @@ import { Readable } from "node:stream"; import getURL from "requrl"; import { SitemapIndexStream, streamToPromise } from "sitemap"; -import apiClient from "../apiBuilder"; +import { apiClient } from "../apiBuilder"; type Sitemap = { url: string;