Netflix API, OAuth и проблема с Ruby - PullRequest
4 голосов
/ 23 января 2009

Я пытаюсь использовать oauth с редкой веткой Ruby gem. Я получаю сообщение об ошибке:

экземпляр OAuth :: Потребитель должен иметь метод `marshal_load '

Мой код, activ.rb ниже. Есть мысли о том, как это исправить? СПАСИБО! -Генри

require 'oauth/consumer'

def index
  @consumer = OAuth::Consumer.new("CONSUMER KEY","CONSUMER SECRET", {
     :site => "http://api.netflix.com",
     :request_token_url => "https://api-user.netflix.com/oauth/request_token",
     :access_token_url => "http://api.netflix.com/oauth/access_token",
     :authorize_url => "https://api-user.netflix.com/oauth/login",
     :application_name => "AppName"})

  @request_token = @consumer.get_request_token

  session[:request_token]=@request_token
  session[:request_token_secret]=@request_token.secret

  @authorize_url = @request_token.authorize_url({
     :oauth_consumer_key => "CONSUMER KEY"
     :application_name => "AppName",
     :oauth_callback => "http://localhost:3000/activate/callback"
   })

  redirect_to @authorize_url
end

def callback
  @request_token=OAuth::RequestToken.new(session[:request_token],
  session[:request_token_secret])
  @access_token = @request_token.get_access_token

end

Ответы [ 3 ]

5 голосов
/ 23 марта 2009

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

Вам может потребоваться очистить хранилище сеансов, чтобы избавиться от токена, который вы там уже поместили.

0 голосов
/ 09 октября 2009

Я не знаю, является ли это лучшим решением для этого, но вот как я обошел это:

Я добавил следующий код в свою среду. Rb:

class OAuth::Consumer
     def marshal_load(*args)
      self
    end

Больше хака, Это определенно исправит ошибку загрузки маршала. Я не знаю, может ли это вызвать другие проблемы.

0 голосов
/ 24 января 2009

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

У меня были похожие проблемы с API Yammer, и я так и не разобрался с ними. Возможно, вы захотите проверить API Yammer, Stammer, который сделал Бен Скофилд в Ruby , который обрабатывает магию OAuth

...