Как использовать omniauth для совершения аутентифицированных звонков в сервисы? - PullRequest
8 голосов
/ 15 апреля 2011

Я получил токен / секрет от службы, использующей OmniAuth, и могу сохранить ее для пользователей, но я застрял в том, как на самом деле использовать их для вызова службы.

Ближайшая вещь, которую яЯ видел, что этот вопрос здесь , но способ, которым он решил, что не чувствует себя правильным.Я чувствую, что OmniAuth, вероятно, сделает все это для вас, если вы знаете, что делаете.

В Netflix довольно сложный процесс аутентификации , поэтому я надеялся обойти все это, используя OmniAuth, чтобы абстрагировать меня от всего этого.

Учитывая, что у меня естьтокен и секрет для пользователя, как использовать их при вызове службы, такой как Netflix?

Большое спасибо:)

Ответы [ 2 ]

19 голосов
/ 25 апреля 2011

Привет, я автор драгоценного камня OmniAuth.OmniAuth предназначен для использования в процессе аутентификации.В случае поставщиков OAuth, таких как Netflix, это означает обмен токена запроса на токен доступа, который затем используется для получения пользовательской информации из API.Эти одноразовые вызовы специально разработаны для каждого провайдера и не предназначены для использования в качестве универсального клиента API для данного провайдера.

Что вы можете сделать, используя OmniAuth для получения учетные данные, а затем использовать другую конкретную библиотеку для самого сайта (например, ruby-netflix или что-то еще, я не уверен, что лучше), чтобы совершать звонки.Вы можете получить токен доступа и секретный ключ, полученный в танце аутентификации, путем доступа к env['omniauth.auth']['credentials'], а затем использовать их для инициализации клиента API.

Вы также можете использовать библиотеку OAuth напрямую для выполнения этих вызовов, ноЯ настоятельно рекомендую просто использовать существующую библиотеку, это будет намного быстрее и проще.Имеет ли все это смысл?

7 голосов
/ 18 апреля 2011

OmniAuth - это все об аутентификации;вам, вероятно, стоит взглянуть на другой драгоценный камень для совершения реальных звонков в службу.Например, для Facebook я использую гем и код OAuth2, как показано ниже:

module Facebook
  class Client < OAuth2::Client
    # Return a new OAuth2::Client object specific to the app.
    def initialize
      super(
        APP_CONFIG[:facebook][:api_key],
        APP_CONFIG[:facebook][:app_secret],
        :site => 'https://graph.facebook.com',
        :parse_json => true
      )
    end
  end

  class Token < OAuth2::AccessToken
    # Return a new OAuth2::AccessToken specific to the app
    # and the user with the given token.
    def initialize(token)
      super(
        Facebook::Client.new,
        token
      )
    end
  end
end

access_token = Facebook::Token.new(users_fb_token)
url          = "https://graph.facebook.com/#{user_fb_id}/feed"
response     = access_token.post(url, :message => "My update")

Обратите внимание, что существуют гемы для популярных сервисов, таких как Facebook и Twitter, которые могут управлять закулисными вещами, такими каксоздание токенов, управление URL-адресами и т. д. Для Netflix вы можете проверить следующее:

Также имейте в виду, что OmniAuth просто возвращает вам данные сервиса;Вы можете хранить его и использовать по своему усмотрению (у Devise есть свой собственный шаблон для OmniAuth, с которым вы можете столкнуться, если попытаетесь выйти за рамки).Другой вопрос, который вы связали, не кажется мне слишком надуманным.

...