У меня есть простая форма входа, которую я создал. Кажется, он аутентифицирует любого существующего пользователя, если в поле пароля что-то есть. Очевидно, это огромный недостаток безопасности. Я новичок в том, что имею в виду стек, и использование паспорта для аутентификации пользователей кажется простым, но я не уверен, что сделал это неправильно.
Это мой бэкэнд-код с использованием паспорта js:
app. js
const passport = require('passport');
require('./config/passport');
app.use(passport.initialize());
маршруты / индексы. js
const ctrlAuth = require('../controllers/authentication');
router.post('/login', ctrlAuth.login);
контроллеры / аутентификация. js
module.exports.login = function(req, res) {
passport.authenticate('local', function(err, user, info){
let token;
// If Passport throws/catches an error
if (err) {
res.status(404).json(err);
return;
}
// If a user is found
if(user){
token = user.generateJwt();
res.status(200);
res.json({
"token" : token
});
} else {
// If user is not found
res.status(401).json(info);
}
})(req, res);
};
И наконец, мой конфигурационный файл
config / passport. js
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');
const User = mongoose.model('User');
passport.use(new LocalStrategy({
usernameField: 'email'
},
function(username, password, done) {
User.findOne({
email: username
}, function(err, user) {
if (err) {
return done(err);
}
//Return if user not found in database
if (!user) {
return done(null, false, {
message: 'User not found'
});
}
//Return if password is wrong
if (!user.validPassword(password)) {
return done(null, false, {
message: 'Password is wrong'
});
}
//If credentials are correct, return the user object
return done(null, user);
});
}
));
Я считаю, что сузил ошибку до функции validPassword, где я мог неправильно использовать bcrypt.
userSchema.methods.validPassword = function(password){
return bcrypt.compare(password, this.hash);
};