2012-07-19 9 views
25

Z jakiegoś powodu nie mogę przekierować do/blogu po zakończeniu logowania. W moim kontrolerze logowania mam następujące.res.redirect z 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'); 

     } 

    } 

}; 

ajax jquery

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

zaktualizowana kod

+0

Czy możesz nam powiedzieć dokładnie to, co robi? Jaki kod odpowiedzi otrzymasz? Po pierwsze, musisz skonfigurować swoje oprogramowanie pośrednie ('app.use (express.bodyParser())') podczas początkowego ładowania aplikacji, a nie podczas każdego procesu żądania. –

+0

Zaktualizowałem. Nie otrzymuję żadnej odpowiedzi i mam app.use (express.bodyParser()) w moim app load wewnątrz server.js – lostAstronaut

+0

Generujesz kod odpowiedzi 200, więc musisz uzyskać odpowiedź, być może z puste ciało. Czy na pewno wywoływana jest funkcja 'post' kontrolera logowania? Czy widzisz dane wyjściowe z tych instrukcji 'console.log'? Biorąc pod uwagę twoje if/else, w każdym przypadku wywołujesz 'res.redirect', więc powinieneś otrzymać kod odpowiedzi 301. To prowadzi mnie do przekonania, że ​​to zupełnie inna obsługa trasy, która odpowiada na żądanie. –

Odpowiedz

56

pracy nie można zrobić przekierowanie po AJAX. Musisz to zrobić samodzielnie w JavaScript.

serwer

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

    } 

    ... 

} 

klient

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

to powinno działać.

+0

Dzięki człowiek, który pracował, jedno pytanie. Czy możesz przekierować z serwera? Powiedz, że dostaję się do bloga, a plik cookie sesji nie jest sprawdzany. Czy możesz przekierować z powrotem do logowania za pomocą res.redirect lub czegoś innego. – lostAstronaut

+0

Dzięki za odpowiedź. Przez 3 dni waliłem w głowę, dlaczego nie działa z ajax, ale z haseł przeglądarki. – Tarun

4

POST są przekierowywane do GET. Nie możesz przekierować do POST na POST; możesz to przekazać, ale to byłoby dziwne. Polecam dodanie logiki do trasy GET, która obsłuży zalogowanego użytkownika, a nie zalogowanego użytkownika.

304 prawdopodobnie oznacza, że ​​twoja odpowiedź jest buforowana przez twoją przeglądarkę, ponieważ użyłeś 301 (permanentne przekierowanie, bardzo źle przy logowaniu, itp., Użyj 302).

-2

Brakuje return:

return res.redirect('/'); 
+0

Nie działa dla mnie –

+0

To zostało zadane 5 lat temu, Charles miał rację – lostAstronaut