Já finalizei o curso e consegui criar minha primeira api para o meu projeto pessoal. Surgiu uma dúvida na hora de autenticar o formulario de login e senha, Além de devolver um token eu também quero devolver outras informações, são elas:
- o id do usuário,
- a lista de profile do usuário,
- o id da empresa a qual o usuário é dono.
Segue o código do controller:
@PostMapping
public ResponseEntity<TokenDto> autenticar(@RequestBody @Valid LoginForm user) {
UsernamePasswordAuthenticationToken dadosLogin = user.converter();
try {
Authentication authenticate = authManager.authenticate(dadosLogin); // se estiver tudo ok com o login e senha
String token = tokenService.createToken(authenticate);
//-------------------------------
Long userId = tokenService.getUserId(token);
Optional<User> userById = userRepository.findById(userId);
List<Profiles> profileList = new ArrayList<>();
if (userById.isPresent()) {
profileList = userById.get().getProfiles();
}
List<String> profiles = profileList.stream().map(Profiles::getNameProfile).collect(Collectors.toList());
Company company = companyRepository.findByUserId(userId);
//------------------------------
return ResponseEntity.ok(new TokenDto(token, "Bearer", company.getId(), userId, profiles));
} catch (AuthenticationException e) { // se não devolve uma exceção
e.printStackTrace();
return ResponseEntity.badRequest().build();
}
}
Está funcionando, mas eu me pergunto se estou fazendo da maneira certa, porque não me parece o jeito certo de fazer, parece não ser uma boa prática. O que vocês acham?