2012-01-04 4 views
5

私はExpressのリダイレクトはreq.url

app.post('/login', function(req, res){ 
    if(req.body.password === Server.cfg.auth.userPass) { 
    req.session.user = {nick: req.body.username, pass: req.body.password} 
    res.redirect('/chat') 
    } else { 
    res.render('user/login', { locals: { error: 'Invalid password' } }) 
    } 
}) 

リダイレクトは、ページが正しくレンダリングされたヒスイのファイルで更新されたように動作するようですログイン成功時にリダイレクトルートが変更されません。しかし、URLはまだ/ loginと言っています。私のpageTitle変数(テンプレート変数を介して設定されています)も変わりません。リダイレクト後にページを更新すると、すべてが変更されます。それは変更されないリダイレクト後にのみ発生します。

+0

/チャットを引用符で囲んではいけませんか? res.redirect( "/チャット")? – alessioalex

+0

yesh、ありがとう、質問に入力してください: –

+0

あなたは 'req.method = 'GET';' res.redirectの前に置いてみることができますか?私はPOSTルートでリダイレクトするのと同様の問題があったことを知っています。これはその時点でExpressのバグでした。 – alessioalex

答えて

1

これは、サーバー制御のバックグラウンドバックグラウンドから来るajaxリダイレクトに対処しようとしている人にとってはかなり一般的なものです。私の例は、認証が失敗した場合や、レスポンスをインターセプトしてステータスなどを確認するという同じ概念を使用して、クライアントにJavaScriptをリダイレクトさせることができます。

私のクライアントコードは、実際に基幹モデルであるが、同様に順番にjQueryのAJAXを呼んでいる:必要に応じて、この作品

model.save({ error:function... 

サーバー

function requiresLogin(req, res, next) { 
    if(req.session.user) { 
     next(); 
    } else { 
     //res.redirect('/sessions/new?redir=' + req.url); // won't work 
     res.send("Unauthorized", 403); // send 403 http status 
    } 
} 

クライアント

// Assumes you can get http status from response 
    error: function(resp, status, xhr)... 
     if(resp.status === 403) { 
      window.location = '/sessions/new'; // optionally put a redirLastPage=somewhere 
     } 

私のために。私はまた、なぜこのことを見るために、リダイレクトのアヤックスポストを提案する

関連する問題