0

我使用“asm”创建了一个带有身份验证配置的 Spartacus 项目。我使用 asmAuth.authorizeCustomerSupportAgent() 登录,并使用 OCC API:

GET /{baseSiteId}/users/{userId}/carts/{cartId}

获取具有给定用户和购物车 ID 的购物车。

但是,当我发出 GET 请求时,我在网络中发现我实际上发出了 2 个请求。一个是我给的网址,另一个是

/{baseSiteId}/users/{userId}/carts/{cartId}?fields=DEFAULT,potentialProductPromotions,appliedProductPromotions,potentialOrderPromotions,appliedOrderPromotions,entries(totalPrice(formattedValue),product(images(FULL),stock(FULL)),basePrice(formattedValue),updateable),totalPrice(formattedValue),totalItems,totalPriceWithTax(formattedValue),totalDiscounts(value,formattedValue),subTotal(formattedValue),deliveryItemsQuantity,deliveryCost(formattedValue),totalTax(formattedValue),pickupItemsQuantity,net,appliedVouchers,productDiscounts(formattedValue),user'

第一个请求成功返回购物车。第二个请求返回 401 Full Authentication is required 错误。显然,身份验证标头没有传递到第二个请求中。

我想知道为什么有 2 个请求,如果这是 Spartacus 附带的 defaultOccCartConfig 的原因。如果是,我该如何禁用它或传入身份验证标头?

谢谢!

4

1 回答 1

0

我不确定我是否完全理解您的用例,因为您似乎没有使用开箱即用的 ASM 实现,并且可能还涉及您正在开发的一些自定义代码。

我怀疑这种行为与defaultOccCartConfig:这const包含端点 url 的配置,但没有影响调用次数的配置。

我可以为您概述一些可能与您的案例相关的 ASM 逻辑,并且可以帮助您进行故障排除。

是的,首先,客户支持代理需要登录AsmAuthService.authorizeCustomerSupportAgent()

为了代表客户执行 occ 请求,您需要通过 AsmAuthService.startCustomerEmulationSession() 启动客户模拟会话。您需要为此提供代理的令牌和客户 ID。看:

AsmAuthService.startCustomerEmulationSession()

https://github.com/SAP/cloud-commerce-spartacus-storefront/blob/release/1.4.x/projects/core/src/asm/facade/asm-auth.service.ts#L42

一旦客户模拟会话开始,UserTokenInterceptor应该为所有传出的 occ 请求分配一个身份验证标头,就像它对常规客户会话所做的那样:

UserTokenInterceptor

https://github.com/SAP/cloud-commerce-spartacus-storefront/blob/release/1.4.x/projects/core/src/auth/http-interceptors/user-token.interceptor.ts#L20-L42

于 2020-02-17T21:57:22.813 回答