2
respostas

Mensagem de erro não é mostrada quando a autenticação falha.

Terminei o curso de Node, está funcionando tudo certo, porém não sei se passou despercebido por mim, mas quando a autenticação falha(login ou senha incorretos), não é mostrada nenhuma mensagem para o usuário. Sendo que meu código está exatamente igual ao do instrutor.

passport.use(new LocalStrategy(

        {
            usernameField:'email',
            passwordField:'senha'

        },
        (email, senha, done) =>{
            const usuarioDao = new UsuarioDao(db)
            usuarioDao.buscaPorEmail(email)
                .then(usuario => {
                    if(!usuario || senha != usuario.senha){
                        return done(null, false, {
                            message :'Login e/ou senha incorretos.'
                        });
                    }

                    return done(null, usuario);
                })
                .catch(erro => done(erro,false)

                )
        }
    ))

    passport.serializeUser((usuario, done) => {

        const usuarioSessao = {
            nome: usuario.nome_completo,
            email: usuario.email
        }

        done(null, usuarioSessao);
    });

    passport.deserializeUser((usuarioSessao, done) => {

        done(null,usuarioSessao);
    })


    app.use(sessao({
        secret:'node alura',
        genid: function(req){
            return uuid();
        },

        resave:false,
        saveUninitialized: false
    }));

    app.use(passport.initialize());
    app.use(passport.session());

    app.use(function(req, resp, next){

        req.passport = passport
        next();
    });

};
inicializaLogin(){


        return function(req,resp, next){

            const passport = req.passport;

            passport.authenticate('local', function(erro, usuario, info){

                if(info){

                    return resp.marko(templates.base.login)
                }

                if(erro){

                    return next(erro)
                }

                req.login(usuario,(erro) => {

                    if(erro){

                        return next(erro)
                    }

                    return resp.redirect(LivroControlador.rotas().lista);

                })

            })(req,resp, next)
        }
    }

}
2 respostas

Boa tarde, Vitor! Como vai?

Eu não fiz essa funcionalidade no curso. Inclusive, ela pode ficar como desafio para vc implementar e exercitar ainda mais o conteúdo aprendido durante os cursos. O que acha?

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Fala Instrutor Gabriel, tudo certo e por aí? Gostei dos cursos de node, parabéns!

Eu andei dando uma fuçada aqui para implementar essa funcionalidade abordada no tópico, e deu certo, porém, não acho que foi a melhor maneira nem de longe, e gostaria de ouvir a sua opinião. Por exemplo,

if(!usuario || senha != usuario.senha){
                        return done(null, false, {
                            message :'Login e/ou senha incorretos.'
                        });

Nessa parte, eu não entendi como eu faria para mostrar essa mensagem caso a autenticação falhasse, então acabei meio que ignorando esse código.

inicializaLogin(){


        return function(req,resp, next){

            const passport = req.passport;

            passport.authenticate('local', function(erro, usuario, info){

                if(info){

                    //aqui a implementação do erro
                    return resp.marko(templates.base.loginErro)

                }

Aí criei um arquivo chamado login-erro.marko, que é exatamente igual ao login.marko, só que com um alert-danger mostrando o erro

    <h1>Login</h1>
            <div class="alert alert-danger" role="alert">
              Login e/ou senha incorretos!
            </div>
            <form action="/login" method="post">

                <div class="form-group">
                    <label for="email">E-mail:</label>
                    <input type="text" id="email" name="email" class="form-control"/>
                </div>
                <div class="form-group">
                    <label for="senha">Senha:</label>
                    <input type="password" id="senha" name="senha" class="form-control"/>
                </div>

Aí no index.js dentro da pasta base, adicionei essa chave com esse valor

module.exports = {

    erro404: require('./erros/404.marko'),
    erro500: require('./erros/500.marko'),
    home: require('./home/home.marko'),
    login: require('./login/login.marko'),
    loginErro: require('./login/login-erro.marko')

}

E deu certo. Porém sei que esta é provavelmente uma das piores maneiras de resolver este desafio, e ficaria grato se pudesse me dar algumas dicas para que eu possa ficar melhor ainda com node, e achar soluções melhores, obrigado.