Rails 3 - Faça o login em outro site e mantenha o cookie na sessão
Estou montando um pequeno aplicativo que permitirá que um usuário faça login em um site de rede social semi-popular que não tenha uma API suficiente, por isso estou usando a gem mechanize para automatizar algumas funções que queria adicionar qualquer pessoa para usar, como mensagens em massa.
Devido às restrições da API, sou forçado a fazer isso fingindo ser um usuário interagindo com a interface http do site.
O problema que estou tendo é que uma vez que um usuário efetua login em meu site, como posso manter o cookie do site de rede social com estado na sessão para que ele não precise inserir credenciais para cada carregamento de página?
Eu estava tentando empacotar o cookie da instância mecanizada, mas recebi erros sobre o mutex não ter um método Marshal.
EDIT - Resolvido
Acabou por ser bastante simples, mas a documentação certamente não ajudou o assunto, apenas por causa da incompletude.
Aqui está o que eu fiz para pegar os cookies e trazê-los de volta para futuras solicitações (muito entre código e verificação de erro excluídos por brevidade):
users_controller.rb
def create
session.delete(:agent) if session[:agent]
agent = Mechanize.new
page = agent.get('www.socialnetwork.com/login')
login_form = page.form
login_form.email = params[:login][:email]
login_form.password = params[:login][:password]
page = agent.submit(login_form, login_form.buttons.first)
cookies = agent.cookie_jar.store.map {|i| i}
session[:agent] = Marshal.dump cookies
redirect_to root_path
end
application_controller.rb
before_filter :set_agent
def set_agent
if session[:agent]
@agent = Mechanize.new
cookies = Marshal.load session[:agent]
cookies.each {|i| @agent.cookie_jar.store.add i}
end
end