5

Express を使用して、node.js サーバーでパスポートローカル認証を設定しようとしています。それは非常に簡単であるように思われます。しかし、私は立ち往生しています。

これら 2 つのスニペットは一緒にうまく機能します。

app.get('/', ensureAuthenticated, function(req, res){
    res.redirect('/index.html', { user: req.user });
});

app.post('/login', 
    passport.authenticate('local', { failureRedirect: '/login.html', failureFlash: true, successFlash: "Success!" }),
    function(req, res) {
    res.redirect('/');
});

問題は、アドレス バーに「www.myurl.com/index.html」と入力して、自分のページにドロップするのを妨げるものがないことです。

次のようなコードを使用する場合:

app.get('/index.html', ensureAuthenticated, function(req, res){
    res.redirect('/index.html', { user: req.user });
});

ループに巻き込まれているようです...認証をチェックして、リダイレクトごとに永遠にチェックすることなく、途中で送ってくれたらいいのにと思います。これを回避する方法は何ですか?

ドキュメントでは、リダイレクトではなく .render が使用されているようです。しかし、これは私が.ejsを使用することを要求しているようで、私はそれをしたくありません。これは必須ですか?

++参照用++

 function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) { return next(); }
    res.redirect('/login.html')
}
4

2 に答える 2

3

express.static()とのリクエストを処理させているindex.htmllogin.html思いますか?その場合、index.html最初に認証を確認し、それに応じて動作する ルートを作成できます。

app.get('/index.html', ensureAuthenticated, function(req, res, next) {
  // if this block is reached, it means the user was authenticated;
  // pass the request along to the static middleware.
  next();
});

ミドルウェア スタックに追加する前に、上記のルートが宣言されていることを確認してくださいexpress.static。そうしないと、バイパスされます (Express ミドルウェア/ルートは宣言の順序で呼び出され、要求に一致する最初のものが処理されます)。

編集:これが可能であり、はるかにクリーンであることも忘れています:

app.use('/index.html', ensureAuthenticated);

app.get上記の代わりに)

于 2013-04-15T17:01:30.087 に答える
2

なぜすべてのルートでリダイレクトを使用しているのですか?

app.get('/',ensureAuthenticated,function(req,res){

// your route logic goes here

});

ensureAutheticated は、コードが認証されているかどうかを確認します。ログイン ルートを介して毎回リダイレクトする必要はありません。

res.renderres.redirect()は、さまざまな目的で使用される別のものです。

res.render() がビューをレンダリングするルートにリダイレクトします。ビューは、最新バージョンの Express を使用している場合に使用する必要がある consolidate.js でサポートされている任意のファイルにすることができます。

したがって、ルートからこれらのリダイレクトをすべて削除すると、無限ループが停止するはずです。リクエストが認証されていることを確認するために、ensureAuthenticated を渡すだけで済みます。

于 2013-04-15T16:31:42.173 に答える