Size: a a a

NestJS — русскоязычное сообщество

2021 May 07

D

Dima in NestJS — русскоязычное сообщество
Славься Sorax
источник

K

Kehlani in NestJS — русскоязычное сообщество
А почему бы не устанавливать хэш пароля сразу при создании сущности, а не в хуках? :/
источник

AL

Aleksey Lukyanov in NestJS — русскоязычное сообщество
можете привести пример?
источник

K

Kehlani in NestJS — русскоязычное сообщество
@Injectable
export class UsersService {
 constructor(private readonly usersRepository: UsersRepository, private readonly hashPasswordService: HashPasswordService) {}

 public async createUser(createUserRequest: CreateUserRequest) : Promise<UserResponse> {
     const user = new UserEntity();
     //...
     user.hashedPassword = await this.hashPasswordService.hash(createUserRequest.password)
     //...

    await this.usersRepository.save(user);
    //...
    return userResponse;
 }
}
источник

K

Kehlani in NestJS — русскоязычное сообщество
😁
источник

AI

Alexandr Ischuk in NestJS — русскоязычное сообщество
ого ты выдал
источник

AL

Aleksey Lukyanov in NestJS — русскоязычное сообщество
а чем этот подход лучше использования хуков?
источник

И

Илья | 😶 ☮️... in NestJS — русскоязычное сообщество
совершенно ничем, он только путает
источник

K

Kehlani in NestJS — русскоязычное сообщество
Можно нормально использовать DI 🌚
источник

AI

Alexandr Ischuk in NestJS — русскоязычное сообщество
тем что используется di
источник

K

Kehlani in NestJS — русскоязычное сообщество
Путает чем?
источник

K

Kehlani in NestJS — русскоязычное сообщество
Вообще, если используется TypeORM, то там можно юзать EntitySubscriberInterface, который будет работать с DI:
@Injectable
export class UserEventsListener implements EntitySubscriberInterface<User> {
 constructor(@InjectConnection() private readonly connection: Connection, private readonly hashPasswordService: HashPasswordService) {
   connection.subscribers.push(this);
 }

 public listenTo() {
   return User;
 }

 public async beforeInsert(event: InsertEvent<User>): Promise<void> {
   event.entity.password = await this.hashPasswordService.hash(event.entity.password);
 }
}


Но я не уверен, что там можно вот так напрямую менять поля сущностей
источник

AI

Alexandr Ischuk in NestJS — русскоязычное сообщество
Туда сложно заинджектить какие-либо сервисы. И странные костыли используются в конструкторе.
источник

K

Kehlani in NestJS — русскоязычное сообщество
Всё нормально туда инджектится вроде, так как с точки зрения Nest это обычный провайдер 🧐
Решение брал отсюда https://github.com/nestjs/typeorm/pull/27#issuecomment-431296683 и на него ссылался Камиль здесь https://github.com/nestjs/typeorm/issues/85#issuecomment-476385963
источник

AI

Alexandr Ischuk in NestJS — русскоязычное сообщество
надо перепроверить будет. знаю, что connection нормально инжектится, а вот с другими сервисами были проблемы.
источник

AL

Aleksey Lukyanov in NestJS — русскоязычное сообщество
я sequilize использую, нужно будет с ним проверить возможен ли такой подход
источник

K

Kehlani in NestJS — русскоязычное сообщество
В beforeUpdate лучше этого не делать, наверно. Например, если пользователь захочет поменять себе юзернейм или аватарку, но не пароль — тогда в хуке будет вычислен хэш от хэша и пользователь больше не сможет зайти
источник

IS

Ilya Sinkin in NestJS — русскоязычное сообщество
ну так обычно проверяют, а поменялась ли филда
источник

AL

Aleksey Lukyanov in NestJS — русскоязычное сообщество
Да, сам только что заметил эту проблему, решил добавить проверку пароля перед хешированием
источник

K

Kehlani in NestJS — русскоязычное сообщество
А как ты это в хуке узнаешь? Там ведь не передаются предыдущие значения вроде
источник