2012-07-19 8 views
25

ログインが完了したら、何らかの理由で/ブログにリダイレクトできません。私のログインコントローラには以下のものがあります。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あなたはAJAX後にリダイレクトを作ることができないコード

+0

あなたはそれをやっている正確に何を教えすることはできますか?どのような応答コードを取得しますか?まず、各リクエストプロセス中ではなく、最初のアプリケーションのロード時にミドルウェア( 'app.use(express.bodyParser())')を設定する必要があります。 –

+0

私はそれを更新しました。私は全く応答を得ていないし、私はapp.use(express.bodyParser())内に私のアプリの負荷をserver.js内にある – lostAstronaut

+0

あなたは200応答コードを生成しているので、おそらく空のボディ。ログインコントローラの 'post'関数が呼び出されていますか?それらの 'console.log'ステートメントの出力が見えますか? if/elseを指定すると、 'res.redirect'を呼び出しているので、301レスポンスコードを取得する必要があります。これは、リクエストに応答しているのとはまったく異なるルートハンドラだと私に信じさせます。 –

答えて

56

作業に更新

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

。あなたは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 

これは動作するはずです。

+0

働いてくれたおかげで、1つの質問。あなたはサーバーからリダイレクトできますか?私がブログにアクセスし、セッションクッキーがチェックアウトしていないとします。 res.redirectなどでログインにリダイレクトできますか? – lostAstronaut

+0

返事をありがとう。私はなぜそれがajaxからではなくブラウザのヒットから動作しているのかについて3日間頭を叩いていました。 – Tarun

4

POSTはGETにリダイレクトされます。 POSTからPOSTへのリダイレクトはできません。あなたはそれを転送することができますが、それは変です。ログインしていないユーザーと対話するロジックをGETルートに追加することをお勧めします。

また、304は、301(永続リダイレクト、ログイン時に非常に悪い、302を使用)を使用したため、ブラウザによってキャッシュがキャッシュされている可能性があります。

-2

あなたはreturnが欠落しています

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

私のために働かなかった –

+0

これは5年前に尋ねられた、チャールズは正しい – lostAstronaut