38

Rails-API アプリがあります。多かれ少なかれ「すぐに」使用できますが、Cookie ベースのセッション ストアを追加したいと考えています。これが私がやったことです:

アプリ/コントローラー/application_controller.rb

+ include ::ActionController::Cookies

config/application.rb

+ config.middleware.insert_after ActiveRecord::QueryCache, ActionDispatch::Cookies
+ config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore

config/initializers/secret_token.rb を作成

+ Namespace::Application.config.secret_token = 'token'

config/initializers/session_store.rb を作成

+ Namespace::Application.config.session_store :cookie_store, :key => '_namespace_key'

コントローラーでセッションを調べると、次の結果になります。

<Rack::Session::Abstract::SessionHash:0x3fdadc5daa24 not yet loaded>

ただし、データが書き込まれて使用されているようです。

しかし、私のブラウザでは、Cookie 自体が「_namespace_key」ではなく「_session_id」という名前になっています。

Cookie ベースのセッション ストレージに必要なすべての要素を追加したと思っていましたが、他に何か不足しているようです。何か案は?

4

4 に答える 4

9

application.rbファイルからこれらのミドルウェア宣言を削除し、これを追加する必要があります。

config.api_only = false

session_storeこれにより、イニシャライザのどこかに構成されている場合(持っている)、必要な方法でセッション管理が有効になります。これは明確に文書化されていませんが、それがあなたがすべきことです

はこちら

于 2013-03-12T14:04:09.743 に答える
8

完全な Rails スタックを使用していないため、この行は無視されます。

::Rails.application.config.session_store :cookie_store,
  :key => '_namespace_key'

代わりに、セッションはここに設定されたデフォルトのセッション キーを使用しています。ただし、次のように置き換えて、これらの引数を直接渡すことができます。

config.middleware.insert_after 
  ActionDispatch::Cookies, ActionDispatch::Session::CookieStore

と:

config.middleware.insert_after
  ActionDispatch::Cookies, ActionDispatch::Session::CookieStore,
  :key => '_namespace_key'

渡すことができるオプションの完全なリストを次に示します(一部のオプションは Rails のモジュールによってオーバーライドされる可能性があるため、デフォルトの大まかな考え方を示します)。

于 2015-04-13T16:59:38.120 に答える