Проверка подлинности паспорта - LocalStrategy никогда не вызывается - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь аутентифицироваться с помощью 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, как вприведенный выше код, и непосредственно требуемый вариант.

1 Ответ

0 голосов
/ 05 октября 2018

При входе в систему вы вызываете стратегию local, используя passport.authenticate, но вы не создали стратегию local.

Пожалуйста, попробуйте

passport.use('local', new LocalStrategy(

вместо

passport.use(new LocalStrategy(

...