我在使用护照时遇到麻烦。使用本地策略进行身份验证,在本地使用postgresql并使用此策略进行比较并尝试登录:
const LocalStrategy = require('passport-local').Strategy;
const db = require('./config/database.js');
const bcrypt = require('bcryptjs');
const User = require('../models/User');
module.exports = function (passport) {
passport.use(
new LocalStrategy({
usernameField: 'correo'
}, (correo, contrasena, done) => {
User.findOne({
correo: correo
})
.then(user => {
if (!user) {
return done(null, false, {
message: 'El correo ingresado no está registrado'
});
}
bcrypt.compare(contrasena, user.contrasena, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, {
message: 'La contraseña es incorrecta'
})
}
});
})
.catch(err => console.log(err));
})
);
passport.serializeUser((user, done) =>{
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) =>{
done(err, user);
});
});
}
当我尝试登录时,即使我输入了正确的凭据进行身份验证,也只能从登录句柄路由中获取失败重定向:
router.post('/login', (req, res, next) => {
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/users/login',
failureFlash: true
})(req, res, next);
});
我拥有用于会话的中间件,并在我的app.js和会话上初始化,当然还有序列化和反序列化。