我有一个简单的Rails应用程序,试图通过它使用Netflix API来访问我的一些订户信息,例如我的历史记录和队列。我的问题是,无论我做什么,Netflix都不会使用我的oauth_callback
网址,而是在我使用用户凭据授权应用程序后将其转发到Netflix网站。
这是向Netflix API发出请求的 Controller 代码
class ExportController < ApplicationController
def export
consumer = OAuth::Consumer.new( ENV['NETFLIX_KEY'],ENV['NETFLIX_SECRET'],
:site => "http://api.netflix.com",
:request_token_url => "http://api.netflix.com/oauth/request_token",
:access_token_url => "http://api.netflix.com/oauth/access_token",
:authorize_url => "https://api-user.netflix.com/oauth/login" )
request_token = consumer.get_request_token
session[:request_token]=request_token
session[:request_token_secret]=request_token.secret
url = request_token.authorize_url( :oauth_callback => "http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/", :oauth_consumer_key => ENV['NETFLIX_KEY'],
:application_name => ENV['APPLICATION_NAME'] )
redirect_to url
end
def export_callback
@request_token=OAuth::RequestToken.new(session[:request_token],session[:request_token_secret])
@access_token = @request_token.get_access_token(:oauth_verifier => params[:oauth_verifier])
end
end
Controller 正确重定向到
https://api-user.netflix.com/oauth/login
站点,并正确设置所有参数。我得到了Netflix登录/授权应用程序页面。但是,如果我查看此页面的源代码,则会看到
oauth_callback
字段设置为oob
的形式 <input type="hidden" name="oauth_callback" value="oob"/>
我已经检查了几种不同的方法,并且将
oauth_callback
参数设置为与Netflix Authentication Walkthrough相同。实际上,当我完成演练并将回调URL放在其字段中时,它实际上确实会重定向回我的Rails应用程序。所以,我的问题是,有人知道如何让Netflix尊重我的
oauth_callback
字段吗?编辑:
https://api-user.netflix.com/oauth/login?oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F&oauth_consumer_key=[REMOVED]&oauth_nonce=631831&oauth_timestamp=1321458391&application_name=[REMOVED]&oauth_token=[REMOVED]
您会看到正在设置
oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F
,这是到我的本地Rails应用程序的路线。编辑2:
我在Mac OS X 10.6.8上使用
oauth (0.4.5)
和rails (3.1.0)
和ruby-1.9.2-p290 [ x86_64 ]
。 最佳答案
形式中的oob
可能是指“超出范围”。问题在于:
request_token = consumer.get_request_token
Netflix使您在获得请求 token 时传递回调URL,并在登录页面中验证URL。就您而言,如果将其更改为:
request_token = consumer.get_request_token(
:oauth_callback =>
"http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/" )
从那时起,一切都应该起作用,并且表单将获得此值。我测试了您的代码,得到了相同的
oob
,然后添加了更改,它在表单中给出了正确的值。关于ruby-on-rails-3 - 如何使Netflix OAuth API使用我的回调?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8034314/