-
-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Адаптер keto-grpc
#289
Comments
@SlumberyDude посмотри пожалуйста тест в |
@Nelfimov Нашел вот тут похожий кейс, что глобальную константу нестовую не нужно экспортировать, если убрать Наверное глобальный гард можно не экспортировать, потому что в доке написано, что они распространяются на все приложение. (вот непонятно, где это приложение заканчивается) https://docs.nestjs.com/guards и будут работать для всего приложения наверное
|
@SlumberyDude столкнулся с другой проблемой - в интеграционном тесте Воспроизведение: Nest can't resolve dependencies of the KetoGuard (Reflector, ?). Please make sure that the argument dependency at index [1] is available in the KetoIntegrationModule context.
Potential solutions:
- Is KetoIntegrationModule a valid NestJS module?
- If dependency is a provider, is it part of the current KetoIntegrationModule?
- If dependency is exported from a separate @Module, is that module imported within KetoIntegrationModule?
@Module({
imports: [ /* the Module containing dependency */ ]
}) Сам тест находится тут: |
пересобери ярн |
Снос После этого повалились все тайпчеки по репе из-за нефиксированных версий. |
@Nelfimov папку кеш, а не ярн лок |
не помогло |
@Nelfimov Проблема в том, что из модуля {
provide: KETO_GUARD,
useFactory: (reflector: Reflector, ketoReadClient: KetoReadClientService) =>
new KetoGuard(reflector, ketoReadClient),
inject: [KETO_READ_CLIENT],
}, То есть он привязывается к токену-константе А потом уже в контроллере клиент (у нас |
@Nelfimov Если явно добавить
Другого способа пока что не нашел |
@SlumberyDude сделал рефактор кода, добавил много чего в провайдеры. Сейчас ошибка такая:
Речь о вот этом провайдере: export class KetoCheckClientService extends CheckServiceClient {
constructor(@Inject(KETO_MODULE_OPTIONS) private readonly options: KetoModuleOptions) {
super(options.read, options.credentials)
}
} И что странно, export const createKetoOptionsProvider = (options: KetoModuleOptions): Provider[] => [
{
provide: KETO_MODULE_OPTIONS,
useValue: options,
},
] Можешь плиз посмотреть? |
@Nelfimov Исправил провайдеры на вот это export const createKetoExportsProvider = (): Provider[] => [
{
provide: KETO_CHECK_CLIENT,
// useClass: KetoCheckClientService,
useFactory: (options: KetoModuleOptions) =>
new KetoCheckClientService(options),
inject: [KETO_MODULE_OPTIONS]
},
{
provide: KETO_WRITE_NATIVE_CLIENT,
// useClass: KetoWriteNativeClientService,
useFactory: (options: KetoModuleOptions) =>
new KetoWriteNativeClientService(options),
inject: [KETO_MODULE_OPTIONS]
},
{
provide: KETO_READ_CLIENT,
// useClass: KetoReadClientService,
useFactory: (checkClientService: KetoCheckClientService) =>
new KetoReadClientService(checkClientService),
inject: [KETO_WRITE_NATIVE_CLIENT]
},
{
provide: KETO_WRITE_CLIENT,
// useClass: KetoWriteClientService,
useFactory: (ketoWriteNativeClientService: KetoWriteNativeClientService) =>
new KetoWriteClientService(ketoWriteNativeClientService),
inject: [KETO_CHECK_CLIENT]
},
{
provide: KETO_GUARD,
useFactory: (reflector: Reflector, ketoReadClient: KetoReadClientService) =>
new KetoGuard(reflector, ketoReadClient),
inject: [KETO_READ_CLIENT],
},
] Прокатило, чтобы |
Теперь будто прошлись по кругу и вернулись обратно:
@Module({
imports: [
KetoModule.register({
read: 'http://localhost:4466',
write: 'http://localhost:4467',
}),
],
controllers: [KetoIntegrationController],
})
export class KetoIntegrationModule {} @Injectable()
export class KetoGuard implements CanActivate {
constructor(
private readonly reflector: Reflector,
@Inject(KETO_READ_CLIENT) private readonly ketoReadClient: KetoReadClientService
) {}
... |
@Nelfimov Может действительно было правильно (как изначально было) сделать {
provide: APP_GUARD,
useFactory: (reflector: Reflector, ketoReadClient: KetoReadClientService) =>
new KetoGuard(reflector, ketoReadClient),
inject: [KETO_READ_CLIENT],
} Чтобы сделать его глобальным. Тогда вроде его не нужно экспортировать, а только записать в провайдеры. И убрать Нужно проверить, будет ли такой глобальный гард работать. |
Проверю, однако цель у этого адаптера сделать локальный гард чтобы покрывать только часть контроллера. |
@Nelfimov А как в прошлый раз получилось преодолеть ошибку, когда такая же была? Ты говоришь мы сделали круг. |
Решил проблему - гарды нельзя экспортировать, иначе они не увидят скоуп модуля куда импортируются. Поэтому просто убрал гард из экспортируемых провайдеров. Тут подробнее: nestjs/nest#3856 (comment) |
@Nelfimov А если их не экспортировать, то тогда как ими пользоваться? |
Брать напрямую из пакета и использовать в UseGuards |
С чем связан запрос на фичу?
Необходимо добавить адаптер и гард для использования
keto-grpc-client
Расскажите как вы это себе видите
@ory/keto-grpc-client
Definition of done (критерий готовности)
Тесты проходят, пакет предоставляет гард, есть кастомизация УРЛа запросов
Приложите пример реализаций
No response
Приложите материалы задачи
No response
The text was updated successfully, but these errors were encountered: