Я впервые использую passport
в проекте expressJS
.
Однако я столкнулся с проблемой. Когда я пытаюсь войти в систему, я отправляю свои данные, и приложение всегда не может аутентифицироваться.
Мой app.js
файл включает в себя следующие данные, связанные с паспортом:
// Passport Config
require('./config/passport')(passport);
// Login
app.post('/users/login', (req, res, next) => {
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/users/login',
failureFlash: false
})(req, res, next);
});
// Passport middleware
app.use(passport.initialize());
app.use(passport.session());
// Express body parser
app.use(express.urlencoded({ extended: false }));
У меня также есть файл passport.js
, который находится внутри каталога config
(/config/passport.js
)
Внутри этого файла я создал свою LocalStrategy, которая отвечает за успех или неудачу аутентификация при входе в систему.
Внутри файла passport.js
, который у меня есть:
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";`
module.exports = function(passport) {
console.log('check if printing-- it is printing')
passport.use(
new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
console.log('check if printing-- it is not printing')
// Match user
MongoClient.connect(url, function(err, db) {
var dbo = db.db("chat_db");
dbo.collection('users').findOne({
email: email
}).then(user => {
if (!user) {
console.log('That email is not registered');
// return done(null, false, { message: 'That email is not registered' });
}
// Match password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Password incorrect' });
}
});
});
})
})
);
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
MongoClient.connect(url, function(err, db) {
var dbo = db.db("chat_db");
dbo.collection('users').findById(id, function(err, user) {
done(err, user);
});
});
})
};
Я считаю, что проблема существует внутри части passport.use(...)
кода, но я не могу понять это вне. Я поместил два console.log()
теста внутри кода, чтобы проверить, какие методы вызываются или нет. Я также протестировал часть dbo.collection('users').findOne()
, которая находит данные с предоставленной электронной почтой, поэтому я полагаю, с этим проблем нет.
Может кто-нибудь помочь мне с этим? Я не знаю, почему не вызывается passport.use(...)
, и поэтому вход в систему всегда терпит неудачу и всегда перенаправляет меня на страницу входа, а не на панель мониторинга. Ваша помощь будет высоко ценится, спасибо за ваше время.