A autenticação local com o passport não passa de uma validação que verifica se o e-mail existe e se a senha está correta, certo?
Por exemplo, tenho o seguinte código que fiz antes de assistir a aula
async signInUser(req, res){
const { email, password } = req.body;
if(!email || !password) return res.status(400).send({msg: 'Campos inválidos'});
const user = await knex('usuarios')
.select('hash')
.where('email', email)
.first();
if (!user) return res.status(404).send({ error:'User not found!'});
if( !await bcrypt.compare(password, user.hash) ){
return res.status(401).send({ error: "Invalid Password"});
}
const loggedUser = await knex('usuarios')
.select('*')
.where('email', email)
.first();
delete loggedUser.hash, delete loggedUser.administrador;
const token = jwt.sign(
{ user: 'alguma coisa' },
"segredo", {
expiresIn: 86400
});
return res.status(200).send({ user: {...loggedUser}, token });
}
Aparentemente, -- não cheguei a entender a fundo o passport -- a utilização do passport atua como um middleware na validação e permite uma escalabilidade do código muito mais rápida e organizada. Mas, a diferença nesse caso simples não parece ser tão grande (código abaixo).
passport.use(
new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
session: false
},
async (email, senha, done) =>{
try{
const usuario = await Usuario.buscaPorEmail(email);
verificaUsuario(usuario);
await verificaSenha(senha, usuario.senhaHash);
done(null, usuario);
} catch(erro){
done(erro);
}
Isso confere? A minha implementação seguindo mais ou menos a documentação tá de certa forma correto? (a implementação do professor é muito mais clean)