Неудачная аутентификация по паспорту в первый раз (nodeJS) - PullRequest
0 голосов
/ 14 июля 2020

У меня проблемы с аутентификацией по паспорту. 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 - -
...