2017-11-20 5 views
0

問題:HTMLファイルを条件付きで送信する必要があります(認証が成功した後)。これは正常に動作しますが、CSSを送信しません。 これは静的なファイルとして提供したくないのは、前述のように、認証されたユーザーだけのためです。明示的に認証した後にHTMLでCSSを提供する

だから私はこのHTMLファイルを誰にでも公開することなくCSSをどのように送信するのですか?

私は一般的なミドルウェアを使用することはできません。なぜなら、認証が必要ないパブリックなファイルがあるからです。だから、各リクエストでトークンをチェックするミドルウェアがあれば、それは壊れてしまうでしょうか?

app.get("/admin/", (req, res) => { 
    let token = req.cookies.sessionToken; 

    fetch("https://authenticationAPI/admin/", { 
     headers:{ 
      Authorization: token 
     } 
    }).then(response => { 
     if (response.status === 200) { 

      res.sendFile("index.html", { root: "./admin" }, (err) => { 
       if (err) console.log(err); 
       res.end(); 
      }); 

     } else { 
      res.send("Sorry, you're not an admin!"); 
      res.end() 
     } 
    }).catch(err => { 
     res.redirect("Sorry, something went wrong there!"); 
    }); 
}); 
+0

CSSを保護する背景には何がありますか?私は実際のページだけを保護すれば十分だと思います。いずれにせよ、以下の私の答えを見てください。 –

+0

ああ、私のOCDはおそらく。主なポイントは私がいくつかのファイルを保護することができますが、他の人を許可することです。 CSSかどうかわからない – ThatBrianDude

答えて

1

あなたは、独自のミドルウェアにあなたの認証ロジックを抽出し、ユーザーが認証されている場合のみ、その上の次の呼び出し、またはそれ以外の場合は401を返すことによって、すべてのリソースを保護することができます。

//Add your auth middleware before all your routes 
app.use(function(req, res, next){ 
    let token = req.cookies.sessionToken; 
    fetch("https://authenticationAPI/admin/", { 
     headers:{ 
      Authorization: token 
     } 
    }).then(response => { 
     if (response.status === 200) { 
      return next(); //allow them to go to the next route/middleware if they are authenticated 

     } else { 
      res.send("Sorry, you're not an admin!"); 
      res.end(); 
     } 
    }).catch(err => { 
     res.redirect("Sorry, something went wrong there!"); 
    }); 
}); 


//Everything form this point is protected 
app.use(express.static("path/to/css/directory")); //route to your css 
app.get("/admin/", (req, res) => { 
    res.sendFile("index.html", { root: "./admin" }, (err) => { 
     if (err) console.log(err); 
     res.end(); 
    }); 
}); 
+0

私は、認証を必要としないルートを持っています。 req.urlが '/ admin'で始まっていれば、条件付きでミドルウェアを実装しました。こうすることで、パブリックフォルダ内のすべてのものにアクセスできるようになりますが、管理者のファイルが必要になると、そのように認証する必要があります。私のさらなる質問は、これはミドルウェアを適用する順番で解決されるだろうか?で、私はすべての管理者のものの前にすべての公開を提供し、それをそのように動作させることができますか?今私は唯一の方法は、ユーザーが何を要求しているかを尋ねていることを参照してください – ThatBrianDude

+1

それは正しいです。ミドルウェアの順序によって、保護されるものが決まります。たとえば、あなたが彼がもうCSSを保護したくないとしたら、この行を 'app.use(express.static(" path/to/css/directory "))に移動することができます。あなたのauthミドルウェアの上のあなたのcssにルーティングしてください。 –

関連する問題