3
respostas

Dúvida na hora de autenticar.

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?

3 respostas

Oi Rafael,

Se essas informações a mais forem utilizadas pela própria API nas próximas requisições, então o ideal seria colocar dentro do token(como foi feito para colocar o id do usuário logado). Mas se são informações que serão utilizadas pelo cliente da api, então pode ser dessa forma que você fez mesmo.

Bons estudos!

Obrigado Rodrigo, sempre prestativo pra tirar dúvidas, quando eu publicar meu app vou deixar um agradecimento especial, hehe. Valeuuu!!

:D valeu!