Estou tendo problemas com o uso OmniAuth com Rails 4.0.0.beta1 em que um valor de sessão definido em SessionsController não está sendo persistido em um redirecionamento. Estou tentando descobrir se é algo no meu código, um bug no Rails 4 ou uma incompatibilidade com a gem OmniAuth. Estou usando a estratégia de desenvolvedor OmniAuth.
Não tenho certeza se isso significa alguma coisa, mas se eu colocar um depurador SessionsController#create
depois de session[:user_id] = user.id
linha e inspecionar classe do objeto de sessão, eu obtenho:
ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullSessionHash
No entanto, se eu inspecionar essa mesma classe de sessão em um aplicativo diferente executando Rails 3.2, recebo:
Hash
Talvez OmniAuth não consiga lidar com o objeto NullSessionHash de maneira adequada?
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"
Respostas:
5 para resposta № 1Acontece que isso está relacionado a um problema entre o Rails 4 e o uso da estratégia de desenvolvedor omniauth gem. Eu consertei em https://github.com/intridea/omniauth/pull/674
Atualizar
Já que o PR não foi mesclado, eu percebi queposte uma solução fácil que pareça funcionar para a maioria das pessoas. O problema é que a estratégia do desenvolvedor não inclui o token de autenticidade do formulário, que o Rails requer por padrão. Você pode desativar isso em seu controlador de sessão com o seguinte:
class SessionsController < ApplicationController
skip_before_filter :verify_authenticity_token
# ...
end