You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spartacus 3.x版本中AuthActions.LOAD_USER_TOKEN_FAIL的替代方案是什么

Spartacus 3.3.0 版本替代AuthActions.LOAD_USER_TOKEN_FAIL的实现方案

Spartacus 3.x 对认证模块完成了整体重构,原有 2.0 版本中的AuthActions.LOAD_USER_TOKEN_FAIL动作已被废弃,可通过以下两种方案实现用户令牌加载失败的HTTP错误码跟踪:

方案1:监听新的NgRx动作

3.3.0版本中原动作已迁移至@spartacus/user/account/core包下的UserTokenActions.LoadUserTokenFail,如果你之前是通过Effect监听动作处理错误,可直接替换动作对象:

import { UserTokenActions } from '@spartacus/user/account/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { inject } from '@angular/core';
import { map } from 'rxjs';

export const trackTokenFailEffect = createEffect(
  () => {
    const actions$ = inject(Actions);
    return actions$.pipe(
      ofType(UserTokenActions.LoadUserTokenFail),
      map((action) => {
        // 直接提取HTTP错误码
        const errorCode = action.error?.status;
        // 自定义业务逻辑
      })
    );
  },
  { functional: true, dispatch: false }
);

方案2:订阅认证错误流

不需要依赖NgRx体系的场景下,可以直接注入AuthHttpErrorService订阅全局认证错误,筛选令牌加载相关的响应即可:

import { AuthHttpErrorService } from '@spartacus/core';
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-error-tracker',
  template: ''
})
export class ErrorTrackerComponent implements OnInit {
  constructor(private authHttpError: AuthHttpErrorService) {}

  ngOnInit(): void {
    this.authHttpError.get().subscribe((httpError) => {
      // 匹配令牌请求接口的错误
      if (httpError.url?.includes('/oauth/token')) {
        const errorCode = httpError.status;
        // 自定义业务逻辑
      }
    })
  }
}

注意:如果项目配置了OCC接口反向代理,需要确保代理返回的错误响应头中Access-Control-Expose-Headers包含status字段,否则前端可能无法正常读取错误码。

内容的提问来源于stack exchange,提问作者Anuj Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 01:27:03