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

[Dúvida] Convertendo Senha com Bcrypt

Eu resolvi criar no controller a ação de criar o usuário

@PostMapping
    @RequestMapping("/create/user")
    @Transactional
    public ResponseEntity createUser(@RequestBody AuthDataDTO data, UriComponentsBuilder uriBuilder){
        var newUsers = new Users(data);

        repository.save(newUsers);

        var uri = uriBuilder.path("/login/create/user/{registration}")
                .buildAndExpand(newUsers.getRegistration()).toUri();

        return ResponseEntity.created(uri).body(new DetailAuthDataDTO(newUsers));
    }

agora a minha dúvida é estou recebendo a "senha" via DTO teria como converter essa senha para ser salva no banco encriptada pelo Bcrypt ?? eu segui o exemplo do vídeo e criei uma migration usando o exemplo do vídeo, mais eu não queria que toda vez que criasse um usuário fosse via migration

INSERT INTO `sica`.`users` (`registration`, `login`, `password`) VALUES ('2', 'adm@sica_school.com', '$2a$10$Y50UaMFOxteibQEYLrwuHeehHYfcoafCopUazP12.rqB41bsolF5.');

Obs.: eu estou usando o modelo do curso mais desenvolvendo um projeto de uma escola por isso o banco não está com o nome vollmed

2 respostas
solução!

Olá Bruno, tudo bem?

Para encriptar a senha com o Bcrypt, você pode utilizar a biblioteca BCryptPasswordEncoder do Spring Security. Você pode injetá-la no seu controller e utilizá-la para encriptar a senha antes de salvar no banco de dados. Ficaria mais ou menos assim:

@Autowired
private BCryptPasswordEncoder passwordEncoder;

@PostMapping
@RequestMapping("/create/user")
@Transactional
public ResponseEntity createUser(@RequestBody AuthDataDTO data, UriComponentsBuilder uriBuilder){
    var newUsers = new Users(data);

    // Encripta a senha antes de salvar no banco
    newUsers.setPassword(passwordEncoder.encode(data.getPassword()));

    repository.save(newUsers);

    var uri = uriBuilder.path("/login/create/user/{registration}")
            .buildAndExpand(newUsers.getRegistration()).toUri();

    return ResponseEntity.created(uri).body(new DetailAuthDataDTO(newUsers));
}

Dessa forma, a senha será encriptada antes de ser salva no banco de dados.

Espero ter ajudado e bons estudos!

Opa Matheus muito obrigado ! cheguei perto disso em um teste, muito simples faltou perseverança kkkk.