/ / Session non persistante à travers la redirection avec OmniAuth et Rails 4 - ruby-on-rails, session, omniauth, ruby-on-rails-4

La session ne persiste pas lors de la redirection avec OmniAuth et Rails 4 - ruby-on-rails, session, omniauth, ruby-on-rails-4

J'ai un problème avec l'utilisation OmniAuth avec Rails 4.0.0.beta1 où une valeur de session définie dans SessionsController n'est pas persistante sur une redirection. J'essaie de comprendre s'il s'agit de quelque chose dans mon code, d'un bogue dans Rails 4 ou d'une incompatibilité avec la gemme OmniAuth. J'utilise la stratégie de développement OmniAuth.

Je ne sais pas si cela signifie quelque chose, mais si je mets un débogueur SessionsController#create après le session[:user_id] = user.id ligne et inspecter la classe l'objet de session, je reçois:

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

Cependant, si j'inspecte cette même classe de session dans une autre application exécutant Rails 3.2, j'obtiens:

Hash

Peut-être qu'OmniAuth ne peut pas gérer correctement l'objet NullSessionHash?

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

config / initializers / secret_token.rb

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

config / initializers / session_store.rb

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

Réponses:

5 pour la réponse № 1

Il s'avère que cela est lié à un problème entre Rails 4 et l'utilisation de la stratégie de développement de gemme omniauth. Je l'ai fixé dans https://github.com/intridea/omniauth/pull/674

Mettre à jour

Étant donné que le PR n'a pas été fusionné, je me suis dit que je "dpublier une solution simple qui semble fonctionner pour la plupart des gens. Le problème est que la stratégie du développeur n'inclut pas le jeton d'authenticité du formulaire, ce que Rails requiert par défaut. Vous pouvez désactiver cela dans votre contrôleur de session avec les éléments suivants:

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