如何扩展从 'nest-keycloak-connect' 导入的 AuthGaurd Class
How to extend AuthGaurd Class Imported from 'nest-keycloak-connect'
我在 nestjs 中使用 nest-keycloak-connect
我想创建自己的 class 从 AuthGuard class 扩展一些自定义功能
我试过了,效果很好
@Injectable()
export class KeycloakAuthGuard extends AuthGuard implements CanActivate {
canActivate(context: ExecutionContext) {
const value = super.canActivate(context);
const [request] = extractRequest(context);
console.log(' ++++++++++++++++++ ++++++++++++++ ', request.user); //getting user here
// Some Custom functionality here..... like call any external request
return value;
}
}
但是我需要添加一个构造函数,这样我就可以在这里使用一些服务,比如HttpService
谁能帮帮我,我该怎么办?
constructor(private http: HttpService) { super() //contructor requires 4 arguments }
如果我给构造函数参数像
constructor(
private http: HttpService,
@Inject(KEYCLOAK_INSTANCE)
private keycloak: any,
@Inject(KEYCLOAK_CONNECT_OPTIONS)
private keycloakOpts: any,
@Inject(KEYCLOAK_LOGGER)
private logger: Logger,
private readonly reflector: Reflector,
) {
super(
keycloak,
keycloakOpts,
logger,
reflector
);
}
我遇到了这个错误
Class 'KeycloakAuthGuard' incorrectly extends base class 'AuthGuard'.
Types have separate declarations of a private property 'keycloak'.
class AuthGaurd 您可以在这里找到代码:
https://github.com/ferrerojosh/nest-keycloak-connect/blob/master/src/guards/auth.guard.ts
nest-keycloak-connect 包
https://www.npmjs.com/package/nest-keycloak-connect
在 Typescript 中,当您为构造函数 属性(例如 public、private)包含修饰符时,您使用的是短格式语法,该语法还定义了 class 成员和将构造函数参数分配给该成员。
class MyClass {
constructor(private readonly thing: number) { }
}
是
的缩写形式
class MyClass {
private readonly thing: number;
constructor(thing: number) {
this.thing = thing;
}
}
因此,如果您只是删除 private keycloak: any,
前面的 private
修饰符,您将简单地接收该值作为构造函数参数,然后您可以将其传递给 super
而不会发生冲突在基础 class
的现有 class 成员上
好的,我从图书馆作者那里得到的是
重命名构造函数属性,因为它们会与超类冲突。
constructor(
@Inject(KEYCLOAK_INSTANCE)
private keycloak1: any
@Inject(KEYCLOAK_CONNECT_OPTIONS)
private keycloakOpts1: any,
@Inject(KEYCLOAK_LOGGER)
private logger1: Logger,
private readonly reflector1: Reflector
)
我在 nestjs 中使用 nest-keycloak-connect 我想创建自己的 class 从 AuthGuard class 扩展一些自定义功能
我试过了,效果很好
@Injectable()
export class KeycloakAuthGuard extends AuthGuard implements CanActivate {
canActivate(context: ExecutionContext) {
const value = super.canActivate(context);
const [request] = extractRequest(context);
console.log(' ++++++++++++++++++ ++++++++++++++ ', request.user); //getting user here
// Some Custom functionality here..... like call any external request
return value;
}
}
但是我需要添加一个构造函数,这样我就可以在这里使用一些服务,比如HttpService 谁能帮帮我,我该怎么办?
constructor(private http: HttpService) { super() //contructor requires 4 arguments }
如果我给构造函数参数像
constructor(
private http: HttpService,
@Inject(KEYCLOAK_INSTANCE)
private keycloak: any,
@Inject(KEYCLOAK_CONNECT_OPTIONS)
private keycloakOpts: any,
@Inject(KEYCLOAK_LOGGER)
private logger: Logger,
private readonly reflector: Reflector,
) {
super(
keycloak,
keycloakOpts,
logger,
reflector
);
}
我遇到了这个错误
Class 'KeycloakAuthGuard' incorrectly extends base class 'AuthGuard'. Types have separate declarations of a private property 'keycloak'.
class AuthGaurd 您可以在这里找到代码: https://github.com/ferrerojosh/nest-keycloak-connect/blob/master/src/guards/auth.guard.ts
nest-keycloak-connect 包 https://www.npmjs.com/package/nest-keycloak-connect
在 Typescript 中,当您为构造函数 属性(例如 public、private)包含修饰符时,您使用的是短格式语法,该语法还定义了 class 成员和将构造函数参数分配给该成员。
class MyClass {
constructor(private readonly thing: number) { }
}
是
的缩写形式class MyClass {
private readonly thing: number;
constructor(thing: number) {
this.thing = thing;
}
}
因此,如果您只是删除 private keycloak: any,
前面的 private
修饰符,您将简单地接收该值作为构造函数参数,然后您可以将其传递给 super
而不会发生冲突在基础 class
好的,我从图书馆作者那里得到的是
重命名构造函数属性,因为它们会与超类冲突。
constructor(
@Inject(KEYCLOAK_INSTANCE)
private keycloak1: any
@Inject(KEYCLOAK_CONNECT_OPTIONS)
private keycloakOpts1: any,
@Inject(KEYCLOAK_LOGGER)
private logger1: Logger,
private readonly reflector1: Reflector
)