首次通过护照认证失败(nodeJS)

时间:2020-07-14 09:30:54

标签: node.js express authentication passport.js passport-local

我在使用passport.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;

我的password.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 - -

0 个答案:

没有答案