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 № 1Il 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