Rails 3 - 登录到另一个站点并保持cookie在会话中

时间:2013-06-09 02:43:29

标签: ruby-on-rails-3 cookies mechanize

我正在整理一个小应用程序,它允许用户登录一个没有足够API的半流行社交网站,所以我使用mechanize gem自动执行我想要的一些功能添加供任何人使用,例如批量消息。

由于API限制,我不得不伪装成与网站的http界面交互的用户。

我遇到的问题是,一旦用户登录到我的网站,如何在会话中有条不紊地保留社交网站中的cookie,以便他们不需要为每个页面加载输入凭据?

我试图整理机械化实例中的cookie,但是我收到了关于互斥锁没有Marshal方法的错误。

编辑 - 解决了

原来很简单,但文档肯定没有帮助,只是因为不完整。

以下是我为捕获cookie而将其带回来以备将来的请求(为简洁而排除代码和错误检查之间):

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

1 个答案:

答案 0 :(得分:0)

不要存储代理,只存储会话cookie。找到要捕获的cookie的名称。登录后,从Mechanize cookie jar中获取它,将其存储在会话中,并确保它在每个“API请求”之前都在cookie jar中。

相关问题