web-dev-qa-db-ja.com

Flaskバックエンドとクライアント側のレンダリングに関する誤解を解消する

私はウェブサイトを構築していますが、その途中で、知らないことがたくさんあり、それらのいくつかを理解するための助けを得ることを望んでいました。

FlaskとJinjaテンプレート言語を使用してWebサイトの構築を開始しました。これは非常に直感的で理解しやすいものでした。クライアントが要求を行い、サーバーがすべての要求が適切であるかを確認してから、作業ページ全体を配信します。一行。

次に、ReactJSを使用するようにフロントエンドをアップグレードしたいと思いました。私の研究から、python-reactのようなライブラリを使用した場合、私はcouldがサーバー側のレンダリングルートに進むことがわかりましたが、代わりにクライアント側のレンダリング。これはいくつかのことを意味しました

  • フロントエンドをレンダリングするには、フロントエンドサーバー(node.jsなど)が必要です
  • APIのように動作させるには、Flaskバックエンドをリファクタリングする必要があります

したがって、クライアントがたとえばホームページをリクエストすると、プロセスは次のようになります(私が正しく理解していれば): enter image description here

この時点まで私が正しいと仮定すると、私の質問は、フォームを送信した場合、上の図はどのように見えるのですか?

フォームをレンダリングするときに、フォームにCSRFトークンを埋め込む必要があります。つまり、トークンはフロントエンドサーバーで作成されます。しかし、バックエンドはどのようにしてそのトークンを検証するのでしょうか。すべての認証もフロントエンドサーバーで行う必要がありますか?フロントエンドとバックエンドをどのように組み合わせるかは明確ではありません。

4
turnip

フロントエンドサーバーとバックエンドサーバーを分離する必要性については、あなたは間違っています。必要なのはoneサーバーのみで、Flaskベースのサーバーにすることができます。

  • ユーザーがエントリポイントURL(/homeダイアグラム内)
  • フロントエンドのReactJS実装用の一連の(静的)JSファイルを提供します
  • サイトの動的コンテンツ用のAPIを提供します。

サーバーは1つしかないため、CSRFトークンの処理は問題になりません。

Flaskを使用するAPIでのCSRFの懸念については、 SeasSurf などのプラグインの1つを使用できます。基本的に、CSRFトークンはバックエンドサーバーで作成され、次に、そのサーバーからの応答で渡されるCookieを介してクライアントに格納されます。次に、csrf値が、ポストリクエストのリクエストヘッダー内のバックエンドサーバーに渡されて検証されます。

0
Turnkey