Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Enviando as propriedades para o construtor base

Olá, pessoal! Minha dúvida: Nos prints abaixo eu tenho meu dto e meu model...No meu model, eu estou enviando a propriedade DataNascimento para o construtor base pelo fato da classe IdentityUser não possuir esta propriedade, certo? Mas sendo assim, eu não teria que ter enviado a propriedade Password e RePassword também? Pois o IdentityUser não possui essas 3 propriedades, a única que ele possui seria a Username.

Ou no caso este Username que eu estou utilizando no controller é na verdade referente ao meu dto? Pelo o que entendi, estou usando as propriedades da classe IdentityUser.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

E aí! Beleza?

Tranquilo! Então, olhando os prints, beleza você mandar a DataNascimento pro construtor base do model porque o IdentityUser não tem essa propriedade, tá certinho. Agora, sobre o Password e RePassword, se essas paradas não são da classe IdentityUser, talvez você tenha que lidar com elas no teu dto, saca? Tipo, manda elas lá pro dto e não pro model.

E quanto ao Username, parece que você tá usando ele no controller, certo? Pelo que você falou, pode ser que seja do dto, porque o IdentityUser tem o Username, mas confere lá se tá tudo alinhado. Se tiver mais dúvida, cola aí!

Opa! Tranquilo?

Entendi, mas então porque exatamente tive que enviar a minha propriedade 'DataNascimento' para o construtor base, se posso utilizá-la sem fazer isso (Assim como faço com o Username, Password e Repassword? Isso não ficou mto claro pra mim...

solução!

Opa, boa tarde.

Bom, pelo que entendi, a propriedade DataNascimento é passada para o construtor base para que ela seja inserida na tabela aspnetusers. No vídeo, no minuto 09:30 ele faz um select nessa tabela e lá mostra a propriedade DataNascimento.

A entidade IdentityUser realmente não possui uma propriedade Password, mas sim uma propriedade PasswordHash, e também possui o UserName. Quando é cadastrado um usuário, o autoMapper pega o DTO e converte para entidade Usuario, ou seja, irá preencher os campos da entidade Usuario, e como essa entidade Usuario herda do IdentityUser, ele tem acesso a propriedade UserName, por isso também preenche o campo UserName. Já em relação a propriedade PassWord no DTO, ela é passada para a propriedade PasswordHash através do método CreateAsync() da classe UserManager. Neste método está sendo passado dois argumentos, o primeiro é a entidade Usuario já com seus campos preenchidos (UserName, DataNascimento) e o segundo argumento é justamente a senha que esta sendo passada diretamente do DTO (dto.Password). Essa parte do CreateAsync() mostra a partir do minuto 02:30.

Em relação a propriedade RePassword no DTO, ela não é passada para a entidade, pois ela só é utilizada para garantir que a senha que o usuário digitou seja a senha que de fato ele quis digitar, assim, o RePasswrod compara com a propriedade Password no DTO, onde, se as duas propriedades não baterem, irá retorna um erro.

Entendi direitinho agora. Valeu manin

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software