res.redirect не работает после Node.js Express и Passport.js аутентификации - PullRequest
0 голосов
/ 26 апреля 2018

У меня проблема с перенаправлением страницы с помощью res.redirect ().

Вот мой фрагмент кода.

console.log('user=', req.user); - это работает. После этого страница загружается, но все еще загружается. Произошла ошибка тайм-аута.

res.redirect('/chat/loginsuccess'); - Это не работает.

Кто-нибудь сталкивался с этой проблемой раньше? Пожалуйста, помогите мне.

...
router.post('/login', passport.authenticate('chat-login'), function(req, res, next) {
    console.log('user=', req.user);
    return res.redirect('/chat/loginsuccess');
});

...
passport.use('chat-login', new LocalStrategy({
    // by default, local strategy uses username and password, we will override with email
    usernameField : 'email',
    passwordField : 'password'
}, function(email, password, done) {
    if (email) {
        // Use lower-case e-mails to avoid case-sensitive e-mail matching
        email = email.toLowerCase();
    }

    // asynchronous
    process.nextTick(function() {
        ChatUser.findOne({ 'local.email' :  email }, function(err, user) {
            // if there are any errors, return the error
            if (err) {
                return done(err);
            }

            // if no user is found, return the message
            if (!user) {
                return done(null, false, { message: 'No User Found.' });
            }

            if (!user.validPassword(password)) {
                return done(null, false, { message: 'Oops! Wrong Password.' });
            }

            // success
            return done(null, user);
        });
    });

}));
...

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я исправил эту проблему.Проблема была в passport.deserializeUser().

Вот мой passport.deserializeUser() фрагмент кода.

-Старый код

passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
        if (user != null) {
            done(null, user);
        } else {
            User.findById(id, function(err, admin) {
                if (user != null) {
                    done(null, user);
                }
            });
        }
    });
});

-Обновленный код

passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
        if (user != null) {
            done(null, user);
        } else {
            ChatUser.findById(id, function(err, admin) {
                done(err, admin);
            });
        }
    });
});

Проблема в том, что когда пользователь имеет значение null, done().

не было.
0 голосов
/ 26 апреля 2018

Вы можете просто использовать для паспорта параметры successRedirect и failRedirect.

Ваш маршрут входа будет выглядеть примерно так:

router.post('/login', passport.authenticate('chat-login', {
                                             successRedirect : '/whereEverYouWantIfsuccessfullyLoggedIn',
                                             failureRedirect : '/whereEverYouWantIffailedToLogIn'
}));
...