ユーザーが十分な 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