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)

Problema ao efetuar login

Olá, fiz o passo a passo como consta nos vídeos, porém na tela de login, quando eu preencho os dados e clico em 'Logar', eu permaneço na tela de login. Verifiquei que no cabeçalho da requisição são enviados os dados corretos, porém o retorno é a própria tela de login.

Independente se os dados estiverem certos ou não, ele não loga, nem exibe qualquer mensagem de erro.

código disponivel em github.com/candinhojr/livraria

6 respostas

Olá Candinho, tudo bem com você?

Eu fiz download do seu projeto, e notei algumas inconsistências, mas são simples :)

  1. sessao-autenticacao.js

Esse é um erro chatinho porque a gente quase nunca percebe, no caso:

const UsuarioDao = require('../app/infra/LivroDao');

Você está fazendo o require do DAO de livros e ai a autenticação nunca daria certo :)

Corrigindo para:

const UsuarioDao = require('../app/infra/UsuarioDao');
  1. livro-rotas.js

Aqui eu não entendi, pois não está implementado o método responsável por fazer a autenticação ou redirecionamento, no caso:

Em seu LivroControlador, faltou adicionar as rotas que seriam consideradas autenticada:

class LivroControlador {
    static rotas() {
        return {
            autenticadas: '/livros*',
        [....]
        };
    }

Para então, nas rotas:

const BaseControlador = require("../controladores/BaseControlador");

module.exports = (app) => {
    const rotasLivro = LivroControlador.rotas();


    app.use(rotasLivro.autenticadas, (req, resp, next) => {
        if(req.isAuthenticated()) {
            next()
        }
        else {
            resp.redirect(BaseControlador.rotas().login);
        }
    })

Dessa maneira toda requisição terá o processo de verificação de token, e então irá para a próxima tela, ou será redirecionado para a tela de login :)

Abraços e Bons Estudos!

Olá Geovane, obrigado pelo retorno e por ter visto os erros ^^

  • Corrigi o erro no sessao-autenticacao.js;
  • No livro-rotas.js eu vi que já tinha o middleware, só que estava usando o next() de maneira incorreta. Ao invés de chamar o next() estava desta forma next.
  • No LivroControlador eu já tinha informava quais rotas ele consideraria autenticadas.

Porém, depois das alterações, o login continuou sem funcionar :/ Atualizei o código do git com as últimas correções.

Ahhhh, notei agora que por algum motivo o código do meu LivroControlador está divergente entre o git e a minha máquina local. Vou tentar identificar o que houve

Pronto, em tese o código do git esta atualizado. Subi as alterações, e fiz um novo clone na minha máquina, porém o erro persiste.

código disponivel em github.com/candinhojr/livraria

Opa Candinho, tranquilo?

Com o ajuste do UsuarioDAO faltou corrigir um pequeno detalhe:

Veja que em sessao-autenticacao.js temos:

usuarioDao.buscaPorId(email)

Quando na verdade o método é por email

usuarioDao.buscaPorEmail(email)

Esqueci de lhe avisar, junto com o import, perdão :)

Agora acredito que esteja funcionando corretamente

Abraços e Bons Estudos

solução

Localizei mais um último erro que já corrigi e com isso a aplicação voltou a funcionar.

No sessao-autenticacao.js no método passport.use() eu tentava acessar o método buscaPorId() do usuarioDao, ao invés de usuarioDao.buscaPorEmail(email).

Vou dar o post como concluído. Obrigado pelo retorno meu querido!