无法覆盖 UserAuthenticationTokenService 服务

Can't override UserAuthenticationTokenService service

我正在尝试为登录页面添加自定义逻辑,为此 here 我尝试覆盖 UserAuthenticationTokenService 服务。我想向此方法添加自定义逻辑:

loadToken(userId: string, password: string): Observable<UserToken>;

但是当我尝试导入这个 class 定义时,它来自

import {UserAuthenticationTokenService} from '@spartacus/core/src/auth/services/user-authentication/user-authentication-token.service';

此自动导入项目无法编译后出现错误:

ERROR in ./src/app/services/services.module.ts Module not found: Error: Can't resolve '@spartacus/core/src/auth/services/user-authentication/user-authentication-token.service' in '/home/gyerts/PycharmProjects/fiver/e5p-client/src/app/services'

我做错了什么?

如果您使用的是 Spartacus 2.x,UserAuthenticationTokenService 会出现在 @spartacus/core 中,但不幸的是它似乎不会出现在 public api 中。因此,您将无法导入它。

如果您使用的是 Spartacus 3.x,UserAuthenticationTokenService 已被删除。 Spartacus 3.0 引入了一个新的会话管理实现。您可以了解更多 here.

虽然它确实没有直接导出到 Spartacus 2.x,但我发现它仍然可用。如果您查看已编译的 spartacus-core.d.ts 文件,您会看到 UserAuthenticationTokenService 正在以乱码名称导出:

export { UserAuthenticationTokenService as ɵbj } from './src/auth/services/user-authentication/user-authentication-token.service';

虽然这可能不是最好的主意,但我发现您实际上可以在自己的代码中导入它。您也可以将其重命名回原来的名称以方便阅读:

import { ɵbj as UserAuthenticationTokenService } from '@spartacus/core';

我自己在我当前的项目中使用过它,它似乎工作正常:

@Injectable({
  providedIn: 'root'
})
export class MyUserAuthenticationTokenService extends UserAuthenticationTokenService {}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MyUserAuthenticationTokenService } from './services/my-user-authentication-token.service';
import { ɵbj as UserAuthenticationTokenService } from '@spartacus/core';


@NgModule({
  declarations: [],
  imports: [
    CommonModule,
  ],
  providers: [
    { provide: UserAuthenticationTokenService, useExisting: MyUserAuthenticationTokenService }
  ]
})
export class MyAuthModule {
}