Подтвердить что ты не робот

Res.redirect from POST

По какой-то причине я не могу переадресовать/блог, как только мой логин будет завершен. В моем контроллере входа я имею следующее.

module.exports = {

    post: function(req, res) {
         var login = req.body['login'];                      

         if (login && req.body['login']['password'] == "password") {
            console.log('Granted access');
            res.send({redirect: '/blog'});

         }

         else {
             console.log('wrong password');
             res.redirect('back');

         }

    }

};

jquery ajax

$(document).ready ->

    $('#login-button').click () ->

        $.ajax
            url: '/login'
            type: 'POST'
            data: $('#Password').serialize()
            dataType: 'json'
            success: (data, textStatus, jqXHR) ->
                if typeof data.redirect == 'string'
                    window.location = data.redirect

обновленный рабочий код

4b9b3361

Ответ 1

Вы не можете выполнить перенаправление после AJAX. Вам нужно сделать это самостоятельно в Javascript.

Сервер

post: function(req, res) {
     var login = req.body['login'];          
     app.use(express.bodyParser());


     if (login && req.body['login']['password'] == "tom") {
        var loginPassword = req.body['login']['password'];
        console.log(loginPassword);
        console.log('Granted access');
        res.send({redirect: '/blog'});

     }

     ...

}

клиент

$(document).ready ->
    $('#login-button').click () ->
        $.ajax
            url: '/login'
            type: 'POST'
            data: $('#Password').serialize()
            dataType: 'json'
            success: (data, textStatus, jqXHR) ->
                if typeof data.redirect == 'string'
                    window.location = data.redirect

Это должно работать.

Ответ 2

POST перенаправляются на GET. Вы не можете перенаправлять POST на POST; вы можете направить его, но это было бы странно. Я рекомендую добавить логику к вашему маршруту GET, который будет обрабатывать зарегистрированный пользователь или не зарегистрированный пользователь.

Кроме того, 304, вероятно, означает, что ваш ответ кэшируется вашим браузером, потому что вы использовали 301 (постоянная переадресация, очень плохо при входе и т.д., используйте 302).

Ответ 3

Вам не хватает return:

return res.redirect('/');