0

ユーザー認証を確認できるミドルウェアがあります。これは次のとおりです。

function checkAuth(req, res, next) {
 if (!req.session.user_id) {
   res.redirect('/login');
 } else {
    next();
 } 
}

それについて2つの質問があります。

  1. 強力なユーザー認証チェックですか?または、次のようにDBのuser.idを確認する必要があります。

    if (!req.session.user_id) {
       res.redirect('/login');
    } else {
      User.findById(req.session.user_id, function (err, user) {
        if (!user) return res.redirect('/login');
        else return next();
     })
    }
    
  2. チェックに失敗した場合は、ログインページにリダイレクトします。

     res.redirect('/login');
    

    しかし、AJAXリクエストを受け取った場合は、次のものを送信する必要があります(私は思います)

     res.send(403, 'Permission denied');
    

    では、どのようにしてリクエストのタイプを確認し、適切なタイプの応答を送信できますか?上記のようにするのは正しいアプローチですか?

4

1 に答える 1

4

セッションをチェックするだけで十分です。サーバーのセッションとクライアントのセッションの間にはマッピングがあり、それが十分に安全である理由です。もちろん、「絶対的な」セキュリティが必要な場合はSSLを使用しています(ただし、100%のセキュリティは存在しません)。

Django / RoRがリクエストがAJAX呼び出し(node.jsコードで変換)からのものであるかどうかを確認する方法は次のとおりです。

function isXHR( req, res ) {
    return !!req.header( 'HTTP_X_REQUESTED_WITH' ) === 'XMLHttpRequest';
}

ただし、これは、XHR呼び出しにこのHTTPヘッダーを含める必要があることを意味します。ほとんどのライブラリ(jQuery、Dojo、YUIなど)がそれを行いますが、手動のXHRリクエストを行う場合は、それを含めることを忘れないでください。

あなたのニーズに合うかもしれない別の方法:

function isJSON( req, res ) {
    return !!req.header( 'Content-Type' ) === 'application/json';
}

そこで、Content-Typeヘッダーをチェックしています。(ほとんどのXHRリクエストのように)いくつかのJSONデータを要求する場合は、いくつかのJSONデータを送信します。

于 2012-06-21T12:37:54.107 に答える