2013-03-12 14 views
7

Mam problem z używaniem OmniAuth z Railsami 4.0.0.beta1, gdzie wartość sesji ustawiona w SessionsController nie jest zachowywana przez przekierowanie. Próbuję dowiedzieć się, czy jest to coś w moim kodzie, błąd w Rails 4, lub niekompatybilność z gemem OmniAuth. Używam strategii programistycznej OmniAuth.Sesja nie utrzymuje się w przekierowaniu za pomocą OmniAuth i Rails 4

Nie jestem pewien, czy oznacza to nic, ale jeśli mogę umieścić debugera w SessionsController#create po linii session[:user_id] = user.id i sprawdzić klasę obiektu sesji, otrzymuję:

ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullSessionHash 

Jednak gdybym sprawdzać ten sam klasa sesja w innej aplikacji uruchomiony Rails 3.2 uzyskać:

Hash 

może OmniAuth nie może obsłużyć obiekt NullSessionHash odpowiednio?

sessions_controller

class SessionsController < ApplicationController 
    skip_before_filter :authenticate_user! 

    def create 
    user = User.find_or_create_by_auth_hash(auth_hash) 
    session[:user_id] = user.id 
    redirect_to root_path 
    end 

    protected 

    def auth_hash 
    request.env['omniauth.auth'] 
    end 

end 

konfiguracji/inicjalizatory/secret_token.rb

MyApp::Application.config.secret_key_base = 'REMOVED' 

konfiguracyjne/inicjalizatory/session_store.rb

MyApp::Application.config.session_store :encrypted_cookie_store, key: '_my_app_session' 

Odpowiedz

5

Okazuje się, że jest to związane z problemem między Rails 4 a używaniem strategii dewelopera gemów omniauth. Naprawiłem go w https://github.com/intridea/omniauth/pull/674

aktualizacji

Ponieważ PR nie połączyły się, pomyślałem, że pisać proste rozwiązanie, które wydaje się działać dla większości ludzi. Problem polega na tym, że strategia deweloperska nie zawiera tokenu autentyczności formularza, który domyślnie jest wymagany przez Railsy. Możesz wyłączyć to w kontrolerze sesji:

class SessionsController < ApplicationController 
    skip_before_filter :verify_authenticity_token 
    # ... 
end 
+0

Dziękuję bardzo! –