无法覆盖 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 {
}
我正在尝试为登录页面添加自定义逻辑,为此 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 {
}