passport.authenticate () возвращает неопределенного пользователя - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу создать приложение с помощью логина и регистрации.Регистрация работает нормально, но логин нет (это выдает ошибку 501-not implemented).Вот фрагмент из моего кода:

const passport = require('passport')

router.post('/register', (req, res) => {
  knex
    .from('user')
    .insert({
      firstname: req.body.firstname,
      lastname: req.body.lastname,
      email: req.body.email,
      password: req.body.password,
    })
    .then(() => {
      res.json({ success: true, message: "Data successfully inserted." })
    })
    .catch(() => {
      res.json({ success: false, message: "Error in adding user. Please try again." })
    })
})

router.post('/login', function (req, res, next) {
  passport.authenticate('local', function (err, user, info) {
    console.log("1 err " + JSON.stringify(err))
    console.log("2 user " + JSON.stringify(user))
    console.log("3 info " + JSON.stringify(info))
    if (err) { return res.status(501).json(err); }
    if (!user) { return res.status(501).json(info); }
    req.logIn(user, function (err) {
      if (err) { return res.status(501).json(err); }
      return res.status(200).json({ message: 'Login Success' });
    });
  })(req, res, next);
});

Когда я пытаюсь войти в систему, я получаю:

1 err [{"id":1,"firstname":"john","lastname":"doe","email":"jdoe@example.com","password":"joe"}]

2 user undefined

3 info undefined

Почему user undefined?Я ожидал получить значение true/false.А также почему err имеет это значение?Из-за этого он всегда будет вводить if(err).

Я могу предоставить больше из своего кода, если вы попросите.Спасибо!

РЕДАКТИРОВАТЬ: localpassport

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const knex = require('./db.js');

passport.use('local', new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  function (username, password, done) {
    knex('user')
      .where('email', '=', username)
      .then((err, user) => {
        if (err) { return done(err); }
        if (!user) {
          return done(null, false, { message: 'Incorrect username.' });
        }
        if (!user.isValid(password)) {
          return done(null, false, { message: 'Incorrect password.' });
        }
        return done(null, user);
      })
  }
));

passport.serializeUser((user, done) => {
  done(null, user.id);
});

passport.deserializeUser((id, done) => {
  knex.from('user').where('id', '=', id)
    .then((user) => { done(null, user); })
    .catch((err) => { done(err, null); });
});

module.exports = passport;

1 Ответ

0 голосов
/ 27 сентября 2018

Проблема была внутри локального паспорта:

passport.use('local', new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  function (username, password, done) {
    knex('users')
      .where('email', '=', username)
      .then((user) => {
        if (!user) {
          return done(null, false, { message: 'Incorrect username.' });
        }
        if (password != user[0].password) {
          return done(null, false, { message: 'Incorrect password.' });
        }
        return done(null, user[0]);
      })
  }
));

Не было такого атрибута err.

...