1
resposta

passport e express session

const uuid = require('uuid/v4');
const sessao = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const db =require('./database')
const UsuarioDao = require('../app/infra/usuario-dao')


module.exports = (app) => {

    passport.use(new LocalStrategy(),
    {
        usernameField : 'email',
        passwordField : 'senha'
    }),
    (email,senha,done) =>
    {
        const usuario = new UsuarioDao(db);
        usuario.buscaPorEmail(email)
            .then(user=>
                {
                    if(!user || user.senha != senha)
                    {
                        return done(null,false,
                            {
                                mensagem:'login e senha incorrretos'
                            })
                    }

                    return done(mull,true,user)
                })
                .catch(erro=>
                    {
                        return 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())
}

fala ae pessoal , o passport e o session sao configurados separados correto? so passam a trabalhar juntos quando e feito este comando : app.use(passport.initialize()) app.use(passport.session())

e isso?

outra coisa o passport serve somente para veriricar se os dados estao corretos , para facilitar essa verificaçao, poderia me dar um exemplo sem uso dele , para eu poder ver como ele simplifica isso?

alem disso,o secret seria o hash de sessao?

1 resposta

Oi Luan, tudo bem? Isso mesmo, o Express só fará uso das funcionalidades do Passport depois que você faz uso do app.use.

O Passport, não faz a verificação dos dados, esse código você escreveu, ele facilita a forma de fazer e permite que você flexibilize a autenticação do usuário, se você quiser habilitar autenticação com Facebook e Google por exemplo, só precisa habilitar as estratégias e configurá-las.

O gerenciamento da sessão é ele quem faz também.

Fazer essas coisas sem ele, com certeza exigiria bastante código, por que você teria que ficar lendo na requisição se o cookie da sessão veio, teria que criar ele manualmente, invalidar para deslogar o usuário, etc.