2011-09-16 4 views
0

私のアプリはOmniAuthを使ってFacebookを使ってユーザーを認証しますが、正常に動作しますが、ユーザーがセッションを作成してサインインするたびに、API経由で多くの情報を呼び出すため、Facebookへのリクエストには最大1分かかります。 || User.create_with_omniauth(auth,omniauth)の場合、グラフオブジェクト(プロファイル、好きな人、友人)のみを呼び出すには、以下のコードをどのようにリファクタリングしますか?最初のセッション以外のセッションでFacebook APIへの呼び出しを防止するにはどうすればよいですか?

def create 
    auth = request.env["omniauth.auth"] 
    omniauth = request.env["omniauth.auth"] 
    user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth,omniauth)  

    session[:user_id] = user.id 
    session['fb_auth'] = request.env['omniauth.auth'] 
    session['fb_access_token'] = omniauth['credentials']['token'] 
    session['fb_error'] = nil 

    @graph = Koala::Facebook::GraphAPI.new(current_user.token) 
    current_user.profile = @graph.get_object("me") 
    current_user.likes = @graph.get_connections("me", "likes") 
    current_user.friends = @graph.get_connections("me", "friends") 
    current_user.save 
    redirect_to root_url 
end 

答えて

1

これを行う最も簡単な方法は、あなたが、非同期のジョブに何をしているかの最後の部分を抽出することです。ユーザーを作成する前にこの情報をすべて保持する必要はなく、すぐに必要とされない外部サービスへのリクエストはオフロードする必要があります。

私は現在Facebookと同じことをしています。私はRedis/Resqueを使用して、作成/認証後にユーザーの詳細を更新しています。

+0

私はRedisの学習を開始する必要がありますね。実際にそうするのは良い言い訳です。ありがとう。 – Simpleton

+0

ここから開始:http://railscasts.com/episodes/271-resque – cavneb

関連する問題