Как предотвратить вызовы API Facebook для не первых сеансов? - PullRequest
0 голосов
/ 16 сентября 2011

Мое приложение аутентифицирует пользователей через Facebook с помощью OmniAuth, и оно работает нормально, но каждый раз, когда пользователь должен создать сеанс и войти в систему, запрос к Facebook занимает до минуты, потому что он вызывает много информации через API. Как мне выполнить рефакторинг кода ниже, чтобы вызывать объекты графа (профиль, лайки, друзья) только тогда, когда это || User.create_with_omniauth(auth,omniauth)?

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 Ответ

1 голос
/ 16 сентября 2011

Самый простой способ сделать это - извлечь последнюю часть того, что вы делаете, в асинхронную работу.Кажется, вам не нужно иметь всю эту информацию до создания пользователя, и любые запросы к внешним службам, которые не нужны для неотложных нужд, должны быть выгружены.

Я делаюто же самое с Facebook в настоящее время, и я использую Redis / Resque для обновления информации о пользователях после их создания / аутентификации.

...