2016-10-18 36 views
1

現在、私たちはOmniauthとDeviseTokenAuthでRails 5 APIを実装しています。Rails 5 API OmniauthはActiveRecordセッションストアを使用します

最初の部分はうまくいくようですが、トークンを検証してさらに何かをしようとすると、CookieOverflowエラーが発生します。これはOmniauthのログイン情報が> 4KB以上保存されていることが原因であると推測しました。

私たちは、データベースのストアドセッションに旋回するが、我々は

class AddSessionsTable < ActiveRecord::Migration 
    def change 
    create_table :sessions do |t| 
     t.string :session_id, :null => false 
     t.text :data 
     t.timestamps 
    end 

    add_index :sessions, :session_id, :unique => true 
    add_index :sessions, :updated_at 
    end 
end 
を次のように私達のデータベースの移行がある

gem 'activerecord-session_store' 

を使用している

NoSessionError: You must provide a session to use OmniAuth

Omniauth

からエラーを取得するために継続することを試み

最後に、confiに設定しましたグラム/ application.rbセッションストア

config.session_store :active_record_store, :key => '_my_app_session' 

eはあなたのエラーがOmniAuthを使用するためのセッションを提供する必要があります取得し続けるwhyw私はわかりません。これをcookiestoreに戻した場合

config.middleware.use ActionDispatch::Flash 
config.middleware.use ActionDispatch::Cookies 
config.middleware.use ActionDispatch::Session::CookieStore 

アプリはセッションを認識してCookieOverflowエラーをスローします。

+0

。 'rake middleware'を実行し、omniauthの前にミドルウェアがスタックに入っていることを確認してください。セッションが正しく初期化されません。 – phoet

答えて

1

application.rbファイルにconfig.api_only=falseを設定する必要があります。セッションストアのミドルウェアは、falseに設定されている場合にのみ追加されます。

この場合、ミドルウェアが正しくインスタンス化されていないため、ミドルウェアを手動で追加することはできません。

現在のRailsのコードを確認することができます:私はあなたがクッキーの店のミドルウェアを使用してどのようにActiveRecordの-session_storeの似から提供されたミドルウェアを使用する必要がありますことを前提としていますhttps://github.com/rails/rails/blob/92703a9ea5d8b96f30e0b706b801c9185ef14f0e/railties/lib/rails/application/default_middleware_stack.rb#L58

+0

ありがとうございます - コードリンクが役立ちました。 – CogitoErgoSum

+0

あなたは大歓迎です:) –

関連する問題