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
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.
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.
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.
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.
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With