Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

res.redirect from POST

For some reason I cant redirect to /blog once my login is completed. In my login controller I have the following.

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

The 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 

updated to working code

like image 790
lostAstronaut Avatar asked Jul 19 '12 22:07

lostAstronaut


People also ask

How do I Res redirect?

The res. redirect() function lets you redirect the user to a different URL by sending an HTTP response with status 302. The HTTP client (browser, Axios, etc.) will then "follow" the redirect and send an HTTP request to the new URL as shown below. const app = require('express')(); // The `res.

CAN POST request be redirected?

in response to a POST request. Rather, the RFC simply states that the browser should alert the user and present an option to proceed or to cancel without reposting data to the new location. Unless you write complex server code, you can't force POST redirection and preserve posted data.

What is difference between RES redirect and res render?

In the specific case you show in your question, when you "approve" the login, you may then want to do a res. redirect() to whatever URL you want the user to start on after the login and then create a route for that URL which you will use res. render() to render that page.


2 Answers

You can't make a redirection after an AJAX. You need to do it yourself in Javascript.

server

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 

This should work.

like image 109
Charles Avatar answered Sep 21 '22 01:09

Charles


POSTs are redirected to GETs. You can't redirect to a POST to a POST; you could forward it but that would be weird. I recommend adding logic to your GET route that will handle a logged in versus not logged in user.

Also, 304 likely means your response is being cached by your browser because you used a 301 (permanent redirect, very bad on login, etc.; use 302).

like image 21
cjohn Avatar answered Sep 19 '22 01:09

cjohn