2011-01-03 5 views
0

RoRアプリケーションが「外部」HTTPリクエスト(REST APIなど)を受信して​​受け入れると、Cookieがロードされないため、いつでもどこでもCookieをロードすることができます(RFC2109を参照)。したがって、その値にはアクセスできません。Ruby on Rails 3で受け取ったリクエストごとに 'Set-Cookie'を使うことは可能ですか?

Cookieは、アプリケーションで「内部的に」HTTPリクエストが行われた場合にのみアクセスできます。

答えて

0

REST APIは一般的にステートレスなので、サーバーサイドセッションやクライアントサイドのCookieは使用しないでください。

USER001に属するすべての書籍については
http://abc.com/user/user001/books 

:あなたがそれらに属するユーザのみグラブリソースことを示すためにしたい場合などのコールで結果ことを、Railsのネストされたリソースのアプローチを使用します。

セキュリティを実装する場合は、まずHTTPの代わりにHTTPSを使用する必要があります。実際の実装では、基本認証を使用してリクエストヘッダーでユーザー名/パスワードを設定するか、リクエストごとに渡すユーザーのトークンを設定するOAuthのようなものを使用できます。

1

すべてのブラウザは、ドメインから設定したCookieを自動的に送信します。コントローラメソッドからrequest.cookiesを呼び出すだけで、すべてのブラウザが簡単に確認できます。要求がアプリケーション内から開始されたかどうかは関係ありません(302リダイレクトなど)。

+0

私はそれを行い、空白のハッシュを受け取りました。おそらく、私はapplication.rb、enviroment.rb、...に何かを設定しなければなりませんか? – user502052

+0

Firefoxを使用している場合は、Firebug(http://getfirebug.com/)とFirecookie(https://addons.mozilla.org/en-US/firefox/addon/6683/)をインストールし、あなたが探しているクッキーは実際にブラウザに設定されています。 –

+0

私はすでにこれもしました。クッキーであれば問題ありません。 – user502052

1

私はちょうどFirecookieでこれを試してみました:

  1. はstackoverflow.comに行ってきましドメイン「.stackoverflow.com」クッキー「mycoolcookie」を作成し、放火犯はクッキーがで送信されたことを示しましたリクエストヘッダ。
  2. firebugはmeta.stackoverflow.comに行き、Cookieがリクエストヘッダで送信されたことを示しました。
  3. chat.stackoverflow.comに行ってきたfirebugは、リクエストヘッダーでCookieが送信されたことを示しました。

ブラウザによってCookieが自動的に送信されるため、サーバーはCookieの送信を要求できません。

+0

私は単純なGET HTTPリクエスト "Net :: HTTP.get(URI.parse( 'http://app1.website.com/users'))をapp2からapp1へと 'app1 /コントローラ/ users_controllers.rb 'は、クッキーは追跡されません(要求ヘッダーには存在しません)。設定オプションを正しく設定しない可能性はありますか? – user502052

+0

新しいクライアントのように動作しているサーバーから新しい要求を作成しています。リクエストヘッダーにクッキーを手動で設定する必要があります。下記の例をご覧ください。 –

+0

新しいクライアントのように動作しない可能性はありますか?もしそうなら、どうですか? – user502052

2
new_cookies = {"Cookie" => "mycookie=1234;myothercookie=4567"} 
Net::HTTP.get(URI.parse(http: //app1.website.com/users), new_cookies) 
+1

「Man in the middle」攻撃が存在する可能性があるため、HTTP GETリクエストを使用してクッキーデータ(私の場合はcurrent_user_id)を送信することは安全ではないと思います。についてどう思いますか? – user502052

+0

ユーザーのブラウザからの元のリクエストは、HTTP GETの権利ですか?これは、自分のサブネット内の別のサーバーへの要求よりも傍受される可能性が高くなります。もちろん、値を暗号化するか、httpsを使用することができます。 –

+0

このアプローチを使用していますか?それを使用するようにアドバイスしますか?たぶん、このデータフローや関連する問題を避けるために、いつでもどこでもCookieを読み込むための優れたソリューションがあります。たとえば、現在のユーザーのログインを確認するためにGETリクエストでCookie値を常に渡す必要がある場合、このアプローチを使用してREST APIを実装することはできません。 – user502052

関連する問題