繁体   English   中英

使用OAuth-Ruby和Tumblr API获取访问令牌(Rails 3)

[英]Getting an Access Token with OAuth-Ruby and Tumblr API (Rails 3)

我正在使用OAuth-Ruby与Tumblr应用程序进行OAuth身份验证。 我能够编写通过OAuth的各个步骤进行的代码,但我无法获得访问令牌或实际发出请求。 我可以获取请求密钥,将用户重定向到Tumblr以进行身份​​验证和授予访问权限,并接收经过身份验证的请求密钥。 但我不能比这更远。

我已经注册了我的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错误。

我真的很感激任何建议。 我一直在谷歌搜索并尝试多天不同的事情。 谢谢!

我使用Pelle的oauth插件并对其进行了一些修改以支持xauth,如下所示:

require 'rubygems'
require 'oauth'

CONSUMER_KEY = 'YOUR_CONSUMER_KEY'
CONSUMER_SECRET = 'YOUR_CONSUMER_SECRET'

consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => 'https://www.tumblr.com/oauth/access_token')
access_token = consumer.get_access_token(nil, {}, { :x_auth_mode => 'client_auth', 
                                                    :x_auth_username => "some@email.com", 
                                                    :x_auth_password => "password"})
tumblr_credentials = access_token.get('http://www.tumblr.com/api/authenticate')

puts access_token
puts access_token.token
puts access_token.secret        
puts tumblr_credentials.body

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM