如何使用 updateUser(rabbitmq) 哈希新传递的密码?

问题描述 投票:0回答:1

好吧,我可以在 createUser 中对我的密码进行哈希处理,但是,要更新用户,我需要对这个新传递的密码进行哈希处理,但是当我有 data.senha: senhaHasheada 或 usuarioachar.senha: senhaHasheada 时,我之前无法实现它保存,它说它无效,当我使用 {id, nome, senha, email, idade} = bados 创建一个 const 解构 updateUsuarioDTO 时,它不起作用,因为我需要传递一个 id 参数来搜索用户更新它,如果我有另一个 id: string 参数,它说如果我在第二个参数中有非结构化的dados,则 id 是重复的。

我的身份验证(rabbirtmq)服务(更新用户):

 async atualizarUsuario(dados: atualizarUsuarioDTO){
    const {id, nome, email, senha, idade} = dados
    const usuarioachar  = await this.usuarioRepository.findOneBy({id})
    
    if(usuarioachar === null){
      throw new NotFoundException('úsuario com id nao achado')
    }
    const senhaHasheada = await this.hashearSenha(senha)
  
    
    const usuario = this.usuarioRepository.save({nome, email, senha: senhaHasheada, idade })
    console.log(senha)
    return usuario
  }

我的控制器:

 @MessagePattern({ cmd: 'atualizar-usuario'})
  async atualizarUsuario(@Ctx() contexto: RmqContext,@Payload() {id, ...dados}: atualizarUsuarioDTO){
    const channel = contexto.getChannelRef()
    const message = contexto.getMessage()
    channel.ack(message)
    return this.authService.atualizarUsuario({id, ...dados})

我的createUser(我可以散列密码,我想要类似的东西):

async criarUsuario(dados: CriaUsuarioDTO): Promise<UsuarioEntidade>{
    const {id, nome, email, senha, idade } = dados

    const achado = await this.acharEmail(email)
    if(achado){
      throw new ConflictException('Usuario ja existente com esse email')
    }
    const senhaHasheada = await this.hashearSenha(senha)

    const usuarioSalvar = await this.usuarioRepository.save({
      id, nome, email, senha: senhaHasheada, idade
    })
    return usuarioSalvar
  }

我的API网关控制器:

@Put('usuario/:id')
  async atualizaUsuario(@Param('id') id: string, @Body() data: atualizarUsuarioDTO){
    return this.authServico.send(
      {
        cmd: 'atualizar-usuario'
      },
      {id, data}
    )
  }

我的哈希异步函数(hashearSenha):

async hashearSenha(senha: string){
    const sal = await bcrypt.genSalt(10)
    const hash =  bcrypt.hash(senha, sal)
    return hash
  }

obs:senha这个词是密码。

obs2:当我尝试像dados.senha = senhaHasheda 时,它给出了一个错误:

 ERROR [RpcExceptionsHandler] data and salt arguments required
node.js rabbitmq nestjs
1个回答
0
投票

发送到微服务服务器的负载应该是

{ id, data }
,而不是
{ id, ...data }
。至于为什么它作为新条目而不是更新返回,我认为这是 TypeORM 正在幕后做的事情。您可以尝试使用
update
方法而不是
save
,或者如果您更喜欢这种方法,可以先通过 id 运行
findOne

© www.soinside.com 2019 - 2024. All rights reserved.