我正在使用OAuth-Ruby对Tumblr应用程序进行OAuth身份验证。我能够编写通过OAuth的各个步骤前进的代码,但我无法获取访问令牌或实际发出请求。我可以获取请求密钥,将用户重定向到Tumblr以进行身份验证并授予访问权限,并接收经过身份验证的请求密钥。但我无法获得更远的进展。使用OAuth-Ruby和Tumblr API获取访问令牌(Rails 3)
我已经注册了我的Tumblr应用程序;让我们假设这个问题,它为我提供了以下项:
- OAuth用户密钥:@oauth_consumer_key
- 的密钥:@secret_key
(我有实际价值,但我)
我在用户提交表单时在运行的控制器中运行以下代码,该表单在@tumblog变量中存储信息:
#0. provided when registering application
@key = @oauth_consumer_key
@secret = @secret_key
@site = 'http://www.tumblr.com'
@consumer = OAuth::Consumer.new(@key, @secret,
{ :site => @site,
:request_token_path => '/oauth/request_token',
:authorize_path => '/oauth/authorize',
:access_token_path => '/oauth/access_token',
:http_method => :post })
if @consumer
#1. get a request token
@request_token = @consumer.get_request_token;
session[:request_token] = @request_token
session[:tumblog] = @tumblog
#2. have the user authorize
redirect_to @request_token.authorize_url
else
flash[:error] = "Failed to acquire request token from Tumblr."
render 'new'
end
此代码让我访问Tumblr的正确页面,在此用户授予或拒绝我的应用程序访问用户帐户。假设用户授予访问权限,Tumblr将重定向回我的应用程序,到我在Tumblr注册应用程序时提供的回调。到那时,一切都很好。
我的OAuth回调运行在控制器以下代码:
if params[:oauth_token] && params[:oauth_verifier]
@tumblog = session[:tumblog]
@request_token = session[:request_token]
#3. get an access token
@access_token = @request_token.get_access_token
. . . .
end
在步骤3中,有一个问题。我似乎无法真正与线得到一个访问令牌:
@access_token = @request_token.get_access_token
谁能告诉我什么,我需要做的就是访问令牌?当我运行该行时,出现OAuth :: Unauthorized错误。
我真的很感谢任何建议。我一直在谷歌搜索和多天尝试不同的事情。谢谢!
当然,现在我已经想通了。为了让其他可能会遇到类似问题的人受益,问题在于Tumblr OAuth实现期望将oauth_verifier密钥传递给您提供的OAuth回调。因此,代码@access_token = @ request_token.get_access_token需要更改为@access_token = @ request_token.get_access_token({:oauth_verifier => params [:oauth_verifier]})。 – 2011-01-12 21:43:24
哇,这帮了我很多。 Tumblr应该在他们的API页面上提及这一点,因为我浪费了好几个小时试图弄清楚这个确切的问题。 – dreadpirateryan 2011-08-09 03:30:24