ruby-on-rails – 使用OAuth-Ruby和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 ::未经授权的错误.

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

解决方法

我使用 Pelle’s oauth plugin修改了一点,以支持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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...