У меня проблемы с аутентификацией по паспорту. js. Я могу войти в свое приложение, но только во второй раз, когда пытаюсь войти. В первый раз, когда я пытаюсь войти в систему, он снова перенаправляет меня на страницу входа, что является моей ошибкой перенаправления. Но, как я уже сказал, если я попробую еще раз с теми же учетными данными, все будет хорошо ... Я не могу понять, что делаю не так.
Может кто-нибудь, пожалуйста, помогите?
Мой маршрут:
const router = express.Router();
const { renderSignIn, signIn, logout } = require('../controllers/auth.controller')
// SINGIN
router.get('/signin', renderSignIn);
router.post('/signin', signIn);
//LOGOUT
router.get('/logout', logout);
module.exports = router;
Мой контроллер:
const authCtrl = {};
const passport = require('passport');
authCtrl.renderSignIn = (req, res, next) => {
res.render('auth/signin');
};
authCtrl.signIn = passport.authenticate('local.signin', {
successRedirect: '/profile',
failureRedirect: '/signin',
failureFlash: true
});
authCtrl.logout = (req, res, next) => {
req.logOut();
res.redirect('/');
};
module.exports = authCtrl;
Мой паспорт. js файл:
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const pool = require("../database");
const helpers = require("./helpers");
passport.use(
"local.signin",
new LocalStrategy(
{
usernameField: "username",
passwordField: "password",
passReqToCallback: true
},
async (req, username, password, done) => {
const rows = await pool.query("SELECT * FROM projeto.logins_autorizados WHERE username = ?", [
username
]);
if (rows.length > 0) {
const user = rows[0];
const validPassword = await helpers.matchPassword(
password,
user.password
);
if (password == user.password) {
done(null, user, req.flash("success", "Welcome " + user.username));
} else {
done(null, false, req.flash("message", "Incorrect Password"));
}
} else {
return done(
null,
false,
req.flash("message", "The Username does not exists.")
);
}
}
)
);
passport.serializeUser((user, done) => {
console.log("VOU SERIALIZAR O USER " + user.username)
done(null, user.idlogins_autorizados);
});
passport.deserializeUser(async (id, done) => {
console.log("VOU DESERIALIZAR O USER " + id)
const rows = await pool.query("SELECT * FROM projeto.logins_autorizados WHERE idlogins_autorizados = ?", [id]);
done(null, rows[0]);
});
Выход в первый раз:
POST /signin 302 17.425 ms - 60
GET /profile 302 1.734 ms - 58
VOU DESERIALIZAR O USER 8
GET /signin 200 14.297 ms - 3352
VOU DESERIALIZAR O USER 8
GET /css/styles.css 304 10.295 ms - -
Выход во второй раз:
POST /signin 302 10.948 ms - 60
GET /profile 200 17.754 ms - 5064
VOU DESERIALIZAR O USER 8
GET /css/styles.css 304 17.383 ms - -