2

フォーム (domain.com) とは別のサブドメイン (example.domain.com) にリモート フォームを送信しようとしましたがWARNING: Can't verify CSRF token authenticity、ログに警告が表示され続け、Chrome のインスペクタは、リクエストは(canceled)で、タイプはapplication/x-www-form-urlencodedです。

これは次の形式です。 button_to "Follow", follow_users_url(subdomain: post.user_username_slug), remote: true

を削除するとremote: true、望んでいた結果が得られました。また、アクションの同じサブドメイン (example.domain.com) で同じフォームを使用しようとすると、正しい結果が得られました。

domain: :allすべてのサブドメイン (内) でCookie を共有する方法を見つけましたsession_store.rbが、Ajax リクエストでトークンを共有する方法が見つかりません。

Rails 3.1.3、Ruby 1.9.3、jQuery 1.7.1 を使用しています。

誰でも私を助けることができますか?

編集:

問題はCORSに関連しているようです。今、私はこの (非同期) クロス サブドメイン リクエストを機能させるための最小限の摩擦ソリューションを見つけようとしています。

4

2 に答える 2

3

POST パラメーターに、ヘルパー *form_authenticity_token* によって返される値を含むフィールド "authenticity_token" を含めます。(クッキーとは関係ありません)。

編集ドメイン A の JavaScript がドメイン B と通信するのを防ぐ、Same-Origin ポリシーに違反していると思います (サブドメインにも適用されます)。これには CORS と呼ばれる「オーバーライド」があり、話しているドメインが実装する必要があります。

したがって、ドメイン A と B の両方を制御できると仮定すると、この制限を回避できます。これは、「:remote => true」リクエストが機能しないのに、「通常の」リクエストが機能する理由を説明しています。(CSRF トークン エラーはおそらく不正確です。) Rails (私の例ではドメイン B)での CORS の設定に関する記事を次に示します。

于 2012-01-19T18:10:11.333 に答える
0

両方のコントローラーの認証トークンを同じに設定できます

それはそうですね

protect_from_forger :secret => 'long_secret_string'

両方のコントローラーが同じトークンを使用する場合、サブドメインまたは他のサイトに投稿できるはずです。ただし、クロスサイトスクリプティングの穴をいくつか開けます

于 2012-01-19T18:43:02.150 に答える