web-dev-qa-db-fra.com

res.redirect from POST

Pour une raison quelconque, je ne peux pas rediriger vers/blog une fois ma connexion terminée. Dans mon contrôleur de connexion, j'ai les éléments suivants.

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');

         }

    }

};

Le 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

mis à jour en code de travail

31
lostAstronaut

Vous ne pouvez pas faire de redirection après un AJAX. Vous devez le faire vous-même en Javascript.

serveur

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'});

     }

     ...

}

client

$(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

Cela devrait fonctionner.

62
Charles

Les POST sont redirigés vers les GET. Vous ne pouvez pas rediriger vers un POST vers un POST; vous pouvez le transférer, mais ce serait bizarre. Je recommande d'ajouter de la logique à votre itinéraire GET qui gérera un utilisateur connecté ou non connecté) .

De plus, 304 signifie probablement que votre réponse est mise en cache par votre navigateur parce que vous avez utilisé un 301 (redirection permanente, très mauvaise à la connexion, etc.; utilisez 302).

4
cjohn