4
respostas

Deploy no Heroku -Erro no Login do Usuário criado

Fiz o deploy da minha aplicação no Heroku, acessei a "URL mágica" para a criação do usuário administrador, porém, quando tento o login nesse usuário criado, o login não é efetuado (ele retorna para própria página de login com um parâmetro de erro):

http://cdcspringmvc-fernanda-alura.herokuapp.com/login?error

Nos logs do heroku não aparece nenhum tipo de erro, e sei que o usuário foi criado com sucesso (nas 3 tabelas).

No ambiente local, ao descomentar o método onStartup do ServletSpringMVC, a aplicação roda normalmente.

Será que falta alguma configuração para que o login seja aceito no Heroku? Ou algum problema com o banco de dados Postgre?

O código do meu projeto está disponível no meu Github:

https://github.com/fromnanda/alura-java/tree/master/springmvc-2-integracao-cache-seguranca-e-templates/springmvc2-projeto-inicial

4 respostas

Ah, só um adendo: testei fazer o deploy do código final disponibilizado pelo curso e ele apresenta o mesmo erro :/

Oi Fernanda,

No Heroku você está utilizando o Postgre, certo ?

Vi no seu projeto, na classe JPAConfiguration, que está com as configurações do MySQL (url de acesso ao banco, dialeto do hibernate, etc.).

Será que não é esse o problema ?

Oi Rodrigo,

Estou utilizando o Postgre sim. O projeto no github está com as configurações doMySQL porque estava testando na minha máquina local. As configurações pro Postgre estão no arquivo JPAProductionConfiguration Link da classe no github.

No Procfile eu também estou especificando o profile de produção, com o Postgre.

Oi Fernanda,

Como você disse que ele chamou a url para cadastrar o usuario e de fato ele foi adicionado no banco, então o problema não é no acesso ao Postgres.

O problema então está no login, que ele não deve estar encontrando o usuário ao fazer o select no banco.

Mas eu vi o seu código da página de login e das logicas de login e não vi nada de errado.

Eu só vi um detalhe no seu UsuarioDao, nesse método:

public Usuario loadUserByUsername(String email) {
    List<Usuario> usuarios = manager.createQuery("select u from Usuario u where email = :email", Usuario.class)
        .setParameter("email", email).getResultList();

    if (usuarios.isEmpty()) {
        throw new UsernameNotFoundException("Usuario " + email + " não foi encontrado");
    }
    return usuarios.get(0);
}

Será que na querie, no filtro do email, não deveria ser where u.email ?

Altere aí sua consulta e veja se assim faz alguma diferença:

select u from Usuario u where u.email = :email