У меня проблемы с аутентификацией небольшого примера проекта 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);
Сначала все работало нормально с кодом локального массива, поэтому мои изменения что-то сломали. Кто-нибудь видит ошибку?