4

ユーザーが十分な API を持たない半人気のソーシャル ネットワーキング サイトにログインできるようにする小さなアプリをまとめているので、追加したいいくつかの機能を自動化するために mechanize gem を使用しています。一括メッセージなど、誰でも使用できます。

API の制限により、サイトの http インターフェースとやり取りするユーザーになりすましてこれを行う必要があります。

私が抱えている問題は、ユーザーが自分のサイトにログインすると、ソーシャル ネットワーキング サイトからの Cookie をセッションでステートフルに保持して、ページの読み込みごとに資格情報を入力する必要がないようにするにはどうすればよいですか?

mechanize インスタンスから Cookie をマーシャリングしようとしましたが、ミューテックスにマーシャリング メソッドがないというエラーを受け取りました。

編集 - 解決済み

非常に単純であることが判明しましたが、不完全なため、ドキュメントは問題を解決しませんでした.

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
4

1 に答える 1