Заставить OmniAuth, Devise и Koala работать вместе - PullRequest
6 голосов
/ 30 июня 2011

У меня есть приложение, в котором я выполняю аутентификацию, используя devise и omniauth. Я выяснил, как входить / выходить и т. Д., Я хотел знать, каков наиболее эффективный способ инициализации подключения к конечной точке api графа пользователя и его готовности к использованию в моем приложении.

Например: если на странице профиля я хотел сделать,

profile_image = current_user.fbgraph.get_picture("me")

Как бы я достиг этого с наименьшим количеством вызовов API (я буду использовать похожие вызовы во всем приложении)

1 Ответ

9 голосов
/ 04 августа 2011

Вы можете сделать это, используя что-то вроде Коала . Когда вы аутентифицируете пользователя, вы можете получить токен доступа. Предполагая, что вы следовали учебнику Devise / Omniauth , вы можете сделать что-то вроде этого:

  def self.find_for_facebook_oauth(response, signed_in_resource=nil)
    data = response['extra']['user_hash']
    access_token = response['credentials']['token']
    user = User.find_by_email(data["email"])
    # only log in confirmed users
    # that way users can't spoof accounts
    if user and user.confirmed?
      user.update_attribute('fb_access_token', access_token) 
      user
    end
  end

Получив токен доступа, вы можете сделать что-то вроде:

@graph = Koala::Facebook::API.new(@user.fb_access_token)
profile_image = @graph.get_picture("me")

В моем приложении я проверяю, вошел ли пользователь в систему при поступлении обратного вызова из Facebook. Если они есть, я предполагаю, что запрос был связать учетные записи. Если это не так, я предполагаю, что это запрос на вход в систему.

...