我正在使用OAuth使用Tumblr应用程序进行OAuth身份验证。我能够编写通过OAuth的各个步骤进行的代码,但我无法获得访问令牌或实际提出请求。我可以获得一个请求密钥,将用户重定向到Tumblr以进行身份验证和授予访问权,并接收经过身份验证的请求密钥。但我不能再往前走了。
我已经注册了我的Tumblr应用程序;让我们假设它为我提供了以下密钥:
(我有实际价值,但出于明显的原因,我把它们藏在这里。)
当用户提交表单时,我在控制器中运行以下代码,该窗体将信息存储在@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在第三步,有一个问题。实际上,我似乎无法得到一行的访问令牌:
@access_token = @request_token.get_access_token有人能告诉我我需要做什么才能得到访问令牌吗?当我运行这一行时,我会得到一个OAuth::未经授权的错误。
我真的很感激你的任何建议。几天来,我一直在谷歌上搜索和尝试不同的东西。谢谢!
发布于 2011-04-14 11:56:05
我使用Pelle's 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.bodyhttps://stackoverflow.com/questions/4674207
复制相似问题