2
respostas

erro no servidor ao logar

ola,estou sempre recebendo a pagina ops ao logar.

const template = require('../views/template')
const LivroC = require('../controllers/livro-controller');
const passport = require('passport');

class BaseController 
{
    static rotas()
    {
        return {
            home: '/',
            login: '/login' // nova URL de rota adicionada.
        };
    }

    home()
    {
        return function(req, resp) {
            resp.marko(
                template.base.home
            );
        };
    }

    login() {

        return function(req, resp) {
            resp.marko(template.base.login);
        };
    }

    efetuaLogin() {



            return function(req, resp, next) {

                passport.authenticate('local', (erro, usuario, info) => {
                    if (info) {
                        return resp.marko(template.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);

            };
        }
}

module.exports = BaseController;
imodule.exports = (app) => {

    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, {
                                    mensagem: 'Login e 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
    }));
2 respostas

Olá Luan, tudo bem com você?

Eu dei uma olhada no código até a aula e tem algumas partes faltando na injeção de dependências

No arquivo BaseController faltou essa parte:

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

O atributo passport está dentro da requisição e dentro de sessao-autenticacao, precisamos criar esse atributo:

    app.use(function (req, resp, next) {
        req.passport = passport;
        next();
    })

Também é necessário iniciar o passport e criar a sessão:

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

Você pode estar fazendo essas adições? :)

Abraços e Bons Estudos!

vou fazer isso

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software