Я пытаюсь аутентифицироваться с помощью Passort, используя LocalStrategy.Проблема в том, что эта стратегия, кажется, никогда не вызывается, и если я регистрирую пользовательский объект в моем passport.authenticate, он возвращает «ложь».
Вот мой код на стороне клиента:
logIn = () => {
const username = this.state.mail;
const password = this.state.password;
console.log("stringify " + JSON.stringify({username, password}));
fetch('http://localhost:3001/api/logIn',
{
method: 'POST',
headers: {'Content-Type': 'application/json'
/*'Access-Control-Allow-Origin': '*'*/},
body: JSON.stringify({username, password})
}).then(res => res.json()).then((res) => {
if (!res.success) console.log("fallito");
else console.log(res.username);
});
}
Вот стратегия:
passport.use(new LocalStrategy(
{ usernameField: "mail" },
(username, password, done) => {
console.log("Inside localStrategy");
User.findOne({ mail: username.toLowerCase() }, (err, user) => {
if (err) {
console.log("not found " + err);
return done(err); }
if (!user) {
console.log("not users")
return done(undefined, false, { message: `Email ${mail} not found.` });
}
user.comparePassword(password, (err, isMatch) => {
if (err) {
console.log("password not correct " + err);
return done(err); }
if (isMatch) {
console.log("match");
return done(undefined, user);
}
console.log("invalid password")
return done(undefined, false, { message: "Invalid email or password." });
});
});
}));
Здесь вызов passport.authenticate:
router.post('/logIn', (req, res, next) =>{
console.log('Inside Login post ' + req);
const user = new User();
const {username, password} = req.body;
user.mail = username;
user.password = password;
passport.authenticate('local', (err, user, info) => {
console.log('Inside Login authenticate ' + user.mail);
if (err) { return next(err); }
if (!user) { return res.redirect('/'); }
// req / res held in closure
req.logIn(user, function(err) {
console.log('Inside Login login ' + user);
if (err) { return next(err); }
return res.json({
success: true,
username: req.user.name
});
});
})(user, res, next);
/*
console.log("in authentication: " + req);
return res.json({
success: true,
username: req.user.name
});
}
)(req,res,next);*/
});
Обратите внимание, что я пытался одновременно передать объект User, как вприведенный выше код, и непосредственно требуемый вариант.