Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro 400 Bad Request

Boa noite! Não estou conseguindo retornar o token no postman, Além do erro 400 também aparece esse erro no console: 2020-09-15 20:30:33.016 WARN 11392 --- [nio-8080-exec-2] o.s.s.c.bcrypt.BCryptPasswordEncoder : Encoded password does not look like BCrypt

6 respostas

Oi Raphael,

Como você está testando a requisição no Postman?

Qual endpoint e json que está enviando?

No Postman estou usando o seguinte: POST - http://localhost:8080/auth Body: { "email":"aluno@email.com", "senha":"123456" } Headers: Key: Content-Type Value: application/json

Você está utilizando o banco de dados h2 igual eu usei nos vídeos?

Posta aqui o conteúdo do seu arquivo data.sql.

Não, eu rodei o teu SQL no MySQL, até agora estava funcionando normalmente. Acredito que ele está lançando a exception do método autenticar.

@RestController
@RequestMapping("/auth")
public class AutenticacaoController {

    @Autowired
    private AuthenticationManager authManager;

    @Autowired
    private TokenService tokenService;

    @PostMapping
    public ResponseEntity<TokenDto> autenticar(@RequestBody @Valid LoginForm form){

        UsernamePasswordAuthenticationToken dadosLogin = form.converter();

        try {
            Authentication authentication = this.authManager.authenticate(dadosLogin);        

            String token = this.tokenService.gerarToken(authentication);

            return ResponseEntity.ok(new TokenDto(token, "Bearer"));    
        }catch (AuthenticationException e) {
            return ResponseEntity.badRequest().build();
        } 

    }


// application-properties

spring.datasource.url=jdbc:mysql://localhost/alura_forum?useTimezone=true&serverTimezone=UTC
spring.datasource.username=raphael
spring.datasource.password=167349
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initialization-mode=always

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

forum.jwt.secret=askj/*cApLv187%@$1008/*{}?01dAºªº[aSf+=!=7d²³4A1v4E3v()98~S/-S8cA++0-
forum.jwt.expiration=86400000
solução

Verifica então na tabela de usuário se a senha do teu usuário está igual a que eu mostro no arquivo data.sql, pois essa mensagem de erro Encoded password does not look like BCrypt acontece quando a senha armazenada no banco de dados não está no formato correto do BCrypt.

Legal professor, era isso mesmo, funcionou!!! \o/ Eu tinha entendido que o secret seria comparado com a senha que enviamos no postman. Ainda estou perdido com a ideia do token, não entendi por que existe um secret com um token x e a senha do banco tem um token y. Além disso tem a senha que passamos no postman que é um número inteiro.