Olá pessoal!
No decorrer do curso foi explicado como fazer login/autenticação/criar sessão.
Seria possível explicar/disponibilizar como ficaria o código de logout (encerramento da autenticação/sessão, simulando que a rota fosse /logout) ?
Os principais arquivos/códigos de login (principais) do projeto deste curso são os seguintes:
// arquivo src/config/sessao-autenticacao.js
const uuid = require('uuid/v4');
const sessao = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const UsuarioDao = require('../app/infra/usuario-dao');
const db = require('./database');
module.exports = (app) => {
// configuração da sessão e da autenticação.
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
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(function (req, resp, next) {
req.passport = passport;
next();
});
};
No código abaixo, o código diretamente relacionado ao login corresponde ao método efetuaLogin():
// arquivo src/app/controladores/base-controlador.js
const LivroControlador = require('./livro-controlador');
const templates = require('../views/templates');
class BaseControlador {
static rotas() {
return {
home: '/',
login: '/login'
};
}
home() {
return function(req, resp) {
resp.marko(
templates.base.home
);
};
}
login() {
return function(req, resp) {
resp.marko(templates.base.login);
};
}
efetuaLogin() {
return function(req, resp, next) {
// Lógica de login.
const passport = req.passport;
passport.authenticate('local', (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);
};
}
}
module.exports = BaseControlador;
Obs: se acharem necessário: link do projeto completo deste curso.
Aguardo, desde já obrigado!
Atenciosamente.