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
相关产品推荐
相关产品推荐

