問題タブ [rack-middleware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
41 参照

ruby - [Facebook][Canvas] 元のリクエスト方法を抽出

短縮版

POSTFacebook が Web アプリケーションに対して実行しているリクエストから元のリクエスト メソッドを取得することは何とか可能ですか?

ロングバージョン

現在の Web アプリケーション Facebook キャンバス フレームを最低レベルで互換性を持たせたいと考えています。

Facebookキャンバスについて

Facebook のアプリは、Canvas フレームに読み込まれる Web ページです。ユーザーが Facebook で Canvas アプリを読み込むと、そのページの iframe 内に Canvas URL が読み込まれます。これにより、アプリは標準の Facebook クロム内に表示されます。

私はRubyプログラマーであり、Rack Middlewareはこの問題に対する合理的な解決策のようです。

ラックについて

Rack は、Ruby と Ruby フレームワークをサポートする Web サーバー間の最小限のインターフェースを提供します。

ラックミドルウェアについて

サーバーとフレームワークの間で、ラックはミドルウェアを使用してアプリケーションのニーズに合わせてカスタマイズできます

各ミドルウェアは、このオブジェクトと呼ばれるオブジェクトで初期化され、envある種のハッシュです。REQUEST_METHODHTTP リクエスト メソッドを表すキーが含まれています。

Facebook はすべてのリクエスト メソッドを に変換しPOSTます。POSTアプリケーションを Facebook Canvas コンテキストで動作させるには、アプリケーションにルートを追加する必要があります。

env['REQUEST_METHOD']代わりに、元のリクエスト メソッドに書き直したいと思います。

調査中に、 rack-facebookという宝石を見つけました。

この宝石はまさに私が望むことをしています。params から抽出['fb_sig']['request_method']し、に割り当てenv['REQUEST_METHOD']ます。

悲しいことに、facebook dev blog でブログエントリも見つけました

すべての Canvas アプリは signed_request を処理する必要があります (fb_sig は削除されます)

2011 年 5 月 10 日午後 8 時 25 分

Facebook署名付きリクエストについて

特定のタイプのアプリでは、パーミッションが要求される前であっても、いくつかの追加情報フィールドを含む署名付き要求がアプリに渡されます。

Facebook 開発者用ドキュメントを調べたところ、リクエスト メソッドまたは類似のものがパラメーターの一部ではなくなっていることがわかりましたsigned_request

POSTFacebook が Web アプリケーションに対して実行しているリクエストから元のリクエスト メソッドを取得することは何とか可能ですか?

0 投票する
2 に答える
457 参照

ruby-on-rails - ミドルウェアで実行中のスレッドが古いバージョンの親のインスタンス変数を使用しています

Heroku チュートリアルを使用して websocket を実装しました。

Thin では正常に動作しますが、Unicorn と Puma では動作しません。

また、クライアントのメッセージに応答するエコー メッセージも実装されています。各サーバーで適切に動作するため、websockets の実装に問題はありません。

Redis のセットアップも正しいです (すべてのメッセージをキャッチし、subscribeブロック内のコードを実行します)。

今はどのように機能しますか:

サーバーの起動時に、空の@clients配列が初期化されます。次に、Redis をリッスンし、そのメッセージを @clients 配列から対応するユーザーに送信するための新しいスレッドが開始されます。

ページの読み込み時に、新しい websocket 接続が作成され、@clients 配列に保存されます。

ブラウザーからメッセージを受信すると、同じユーザーに接続されているすべてのクライアントにメッセージを送り返します (その部分は、Thin と Puma の両方で適切に機能しています)。

Redis からメッセージを受信した場合、@clients 配列に保存されているすべてのユーザーの接続も検索します。ここで奇妙なことが起こります:

  • Thin で実行している場合、@clients 配列で接続を検出し、それらにメッセージを送信します。

  • Puma/Unicorn で実行している場合、@clients 配列は、その順序で試しても (ページのリロードなどを行わずに) 常に空です。

    1. ブラウザからメッセージを送信 ->@clients.lengthが 1 の場合、メッセージが配信されます
    2. Redis 経由でメッセージを送信 ->@clients.lengthは 0、メッセージは失われます
    3. ブラウザからメッセージを送信 ->@clients.lengthは 1 のままで、メッセージは配信されます

誰かが私に欠けているものを明確にしてもらえますか?

Puma サーバーの関連構成:

関連するミドルウェア コード:

0 投票する
2 に答える
1582 参照

ruby-on-rails - ラック攻撃はIPをブラックリストに登録しません

Rack-attackとのやり取りはこれが初めてなので、コードに誤りがある可能性がある場合は遠慮なく指摘してください。私が試みているのは、次のようなルートにアクセスしようとしている人をブラックリストに登録するipことです攻撃は、上記の URL にアクセスしようとするものをブロックしていません。"/azenv.php", "/setup.php" etc...phpip

私が実行しようとしているコードのブロックは次のとおりです。

ブロックのいくつかは、Wiki 自体からのものです。ここで何か間違っている場合は修正してください。

アップデート

これは、与えられた例から試しているコードです: