Это моя первая попытка использовать Passport JS, и я слежу за их документацией, которую мне очень трудно понять.
Моя цель - зарегистрировать пользователя через страницу регистрации, компонент реакции, а затем использовать страницу входа, также как компонент реакции, для входа и перенаправления на панель мониторинга, которая снова является компонентом реакции.
Все вышеперечисленное работает, но без паспорта. Я не уверен, что делаю неправильно, так как работаю с ним впервые, но похоже, что это не работает. И под неработающим я подразумеваю, что я не вижу сообщений об ошибках, а страница входа не перенаправляется на панель управления. неправильно.
Это мой компонент входа в систему React, который отправляет Ax ios post-запрос в API:
const onSubmit = (e) => {
e.preventDefault();
const newLogin = {
username,
password,
};
const config = {
headers: {
'Content-Type': 'application/JSON',
},
};
axios.post('/api/v1/login', newLogin, config).then((res) => {
return res.data === 'user'
? (window.location = '/dashboard')
: (window.location = '/login');
});
setUsername('');
setPassword('');
};
На сервере Node. js, указанный выше запрос на вход в систему отправлено контроллеру через маршрутизатор.
сервер. js:
app.use(passport.initialize());
app.use(passport.session());
app.use('/api/v1/register', register);
app.use('/api/v1/login', login);
Маршрутизатор. js (Логин):
const { loginUser } = require('../controllers/loginController');
router.route('/').post(loginUser);
loginController. js:
require('../config/passport')(passport);
exports.loginUser = (req, res, next) => {
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/register',
failureFlash: true,
});
};
Это мой паспорт. js файл:
const User = require('../models/UserModel');
const passport = require('passport');
module.exports = function (passport) {
passport.use(
new LocalStrategy((username, password, done) => {
// Match User
User.findOne({ username: username })
.then((err, user) => {
if (!user) {
return done(null, false, console.log('no user'));
}
//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' });
}
});
})
.catch((err) => console.log(err));
})
);
};
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findOne(id, (err, user) => {
done(err, user);
});
});