/ / A sessão não persiste no redirecionamento com OmniAuth e Rails 4 - ruby-on-rails, sessão, omniauth, ruby-on-rails-4

Sessão não persistente em redirecionamentos com OmniAuth e Rails 4 - ruby-on-rails, sessão, omniauth, ruby-on-rails-4

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

Acontece 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