Node js паспорт локальной аутентификации продолжает загружаться - PullRequest
0 голосов
/ 24 апреля 2020

Я создаю приложение с node js (express и mysql), пытаюсь выполнить аутентификацию с использованием локального паспорта. когда я нажимаю на кнопку входа, все работает нормально, но после сравнения учетных данных успех перенаправления не работает ( продолжайте загружать ). но если учетные данные не совпадают, перенаправление ошибок работает нормально без ошибок .

что не так? где? кто-нибудь может помочь узнать? пожалуйста ...

мой маршрут входа в систему:

router.post('/login', (req, res, next) => { 
       console.log('post login.');          //never logged, why?
    passport.authenticate('local', {
      successRedirect: '/admin/dashboard',
      failureRedirect: '/login',
      failureFlash: true
    })(req, res, next);
  });

конфигурация паспорта:

const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');

// Load User model
const User = require('../config/db').User;

module.exports = function(passport) {
  passport.use(
    new LocalStrategy({usernameField: 'email',  passwordField: 'password' }, (username, password, done) => {
      // Match user
      User.findOne({where: {email: username}}).then(user => {

        console.log(user.name);        //logged user name.

        if (!user) {

          return done(null, false, { message: 'That email is not registered' });
        }

        // Match password
        const isMatched = bcrypt.compareSync(password, user.password);

          if (isMatched) {
              console.log('password matched.');         //logged when password matched.
            return done(null, user);
          } else { console.log('password not matched.');    //logged when password not matched.
            return done(null, false, { error_msg: 'Password incorrect' });
          } 
      });
    })
  );

  passport.serializeUser(function(user, done) {
      console.log('serialized: ', user.id);       //logged when credentials matched.
    return done(null, user.id);
  });

  passport.deserializeUser(function(id, done) {
    User.findByPk(id, function(err, user) {
        console.log('deserialized');

      return done(null, user.id);
    });
  });

};

1 Ответ

0 голосов
/ 25 апреля 2020

После нескольких часов поиска в Google я нашел решение для этой проблемы, проблема здесь в методе deserializeUser. Я просто немного изменил код в deserializeUser, потому что: паспорт не может десериализовать пользователя вне сеанса .

Это сработало хорошо для меня, и я надеюсь, что оно сработает для кто-то с проблемой, как у меня.

passport.deserializeUser(function(user, done) {
      return done(null, user);
    });
...