Passport.js: проблема с сериализацией при локальной стратегии входа - PullRequest
0 голосов
/ 11 января 2019

У меня проблемы с аутентификацией небольшого примера проекта passport.js, когда я переключаюсь на mongodb вместо локального массива.

MongoDB может подключаться и добавлять пользователей из формы на домашней странице. Однако при входе в систему возникают проблемы.

Не уверен, что это имеет значение, но на странице загрузки / входа в систему я вижу две красные ошибки:

Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
login:1 
Unchecked runtime.lastError: The message port closed before a response was received.

Я помещаю запись в соответствующий обработчик маршрута. Он не достигает или не входит в консоль.

app.post('/login', function sendUserRecordToAxiosOrRedirect(req, res, next) {
  passport.authenticate('local', function controlErrorsOrSuccess(error, userRecord, info) {
    console.log('inside pp.auth callback');
    if (error) return next(error);
    if (userRecord == false) return res.json ({ "error" : "Invalid Username" });
    if (userRecord) {
      console.log('---- User Found: INFO --------');
      console.log(info);
      res.redirect('/')
    }
  })
});

Исходя из вышесказанного, я подозревал, что что-то не так со Стратегией, которую я даю паспорту. Оператор журнала в этом тоже не запускается:

passport.use(new Strategy(
  function(username, password, done) {
    console.log('inside Strategy');
    db.users.findInDatabaseByUsername(username, function (error, userRecord) {
      if (error) return done(error);
      if (userRecord == false) return done(null, false); // no error, no userRecord
      if (userRecord.password !== password) return done(null, false); 
      return done(null, userRecord); 
    })
  }
));

Поскольку я изменил свои функции сериализации для поиска в базе данных вместо массива, я подозреваю, что проблема может заключаться здесь. Здесь не сработает ни один из операторов журнала:

const passUserIdOnlyToACallback = function(userRecord, callbackFunction) {
  console.log("serializing...");
  callbackFunction(null, userRecord.id);
};
passport.serializeUser(passUserIdOnlyToACallback); 

function passUserRecordToCallbackById(userId, verifyCallback) {
  db.users.findInDatabaseById(userId, function(error, userRecord) {
    console.log("deserializing...");
    if (error) return verifyCallback(error);
    verifyCallback(null, userRecord) 
  })
}
passport.deserializeUser(passUserRecordToCallbackById);

Сначала все работало нормально с кодом локального массива, поэтому мои изменения что-то сломали. Кто-нибудь видит ошибку?

...