0

単一のコントローラーを備えたシンプルなRailsアプリがあります。コントローラーのいくつかのメソッドに「フィルターの前」があり、セッションオブジェクトを見てユーザーがログインしているかどうかを確認します。

@user = User.where(:id => session[:user_id]) if session[:user_id]

私のコントローラーの「ログイン」メソッドでは、次のことを行います。

session[:user_id] = user.id

かなり普通のもの。Webブラウザー(Chrome)からアプリにアクセスすると、すべて正常に動作します。ただし、iOSアプリからNSURLRequestを使用してRailsアプリにアクセスすると、サーバーは常にリクエストごとに新しいセッションを作成します。リクエストが適切なセッションIDを含むCookieを送信している場合でも、既存のセッションを識別できないようです。実際、Railsアプリで「cookies」オブジェクトを見ると、セッションIDが含まれていることがわかります。ただし、セッションオブジェクトは常に空です。サーバーがセッションを取得できない理由がわかりません。PassengerPhusionを使用しています。助言がありますか?

4

1 に答える 1

1

POSTログインページにアクセスしていて、投稿にセッション内のトークンと一致するCSRFトークンが含まれていない場合、Railsはリクエストに失敗し、セキュリティ上の予防措置としてセッションを無効化/リセットします。

これを修正するには、セッションからCSRFトークンを読み取り、リクエストに含めるか、CSRFトークンチェックをオフにするだけですskip_before_filter :verify_authenticity_token。コントローラーに配置して、CSRF保護チェックをスキップできます。後者のアプローチは潜在的なセキュリティホールを開くため、トークンを含めてチェックすることをお勧めします。

于 2012-10-07T06:20:55.537 に答える