ruby - 我如何判断 Tumblr OAuth 凭据是否有效?

标签 ruby oauth tumblr

使用 ruby​​ OAuth 库,我试图验证以前用户的凭据是否仍然有效。 (以防他撤销了我的应用程序的权限)我已经为 Twitter 完成了没有问题,因为有一个方便的.authenticated? Twitter OAuth 库中的方法。虽然使用通用库,但我找不到类似的方法。

@consumer = OAuth::Consumer.new(
        ENV['TUMBLR_CONSUMER_KEY'],
        ENV['TUMBLR_CONSUMER_SECRET'],
        { :site => 'http://www.tumblr.com',
          :request_token_path => '/oauth/request_token',
          :authorize_path => '/oauth/authorize',
          :access_token_path => '/oauth/access_token',
          :http_method => :get
        }
      )
      @access_token = OAuth::AccessToken.new(@consumer, @tumblrauth['access_token'], @tumblrauth['access_token_secret'])
      puts @access_token.inspect
      @resp = @access_token.get('api/read')
      puts @resp.inspect

我一尝试 @access_token.get() 调用就收到服务器错误,关于 nill 没有 downcase 方法,我猜它期待的是某种字符串。但我不知道它指的是什么参数。

我使用的 access_token 和 secret 以前是可用的,但我撤销了对该应用程序的访问权限以测试如何检测它。我只需要一些方法来知道用户不再注册该服务,这样我就可以切换状态。

这是堆栈跟踪:

NoMethodError - nil:NilClass 的未定义方法“小写”: /Library/Ruby/Gems/1.8/gems/oauth-0.4.4/lib/oauth/request_proxy/base.rb:93:in 'normalized_uri' /Library/Ruby/Gems/1.8/gems/oauth-0.4.4/lib/oauth/request_proxy/base.rb:113:in 'signature_base_string' /Library/Ruby/Gems/1.8/gems/oauth-0.4.4/lib/oauth/signature/base.rb:77:in 'signature_base_string'

最佳答案

尝试:

@resp = @access_token.get('http://www.tumblr.com/api/read/json')

根据以下评论进行编辑:

#Monkey Patch the Oauth gem to fit the "tumblr" way of doing Oauth
class Net::HTTP
  def address=(new_address)
    @address = new_address
  end
end

module OAuth
  class Consumer

    def tumblr_address=(address)
      @tumblr_address = address
      @orig_address = self.http.address
    end

    def create_signed_request(http_method, path, token = nil, request_options = {}, *arguments)
      # Use the original address to generate OAuth signature
      self.http.address = @orig_address if @orig_address

      request = create_http_request(http_method, path, *arguments)
      sign!(request, token, request_options)

      # Submit the request to the tumblr address
      self.http.address = @tumblr_address if @tumblr_address

      request
    end
  end
end

module OAuth
  class RequestToken
    def get_access_token(options = {}, *arguments)
      response = consumer.token_request(consumer.http_method, (consumer.access_token_url? ? consumer.access_token_url : consumer.access_token_path), self, options, *arguments)
      self.consumer.tumblr_address = response[:subdomain]
      OAuth::AccessToken.from_hash(consumer, response)
    end
  end
end

然后在创建@consumer 之后在 Controller 中添加:

@consumer.tumblr_address = "http://user.tumblr.com"

注意:这是未经测试的代码,所以是 YMMV。

关于ruby - 我如何判断 Tumblr OAuth 凭据是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6654611/

相关文章:

oauth - 使用 bidi 包装资源处理程序

oauth - 如何在electron中集成OAuth2.0登录

python - Tumblr API 2 : Where is the "OAUTH_TOKEN" and "OAUTH_TOKEN_SECRET"

regex - 为什么破折号会扰乱正则表达式搜索?

ruby-on-rails - 如何在 Rails 的 json_response 中显示所有关联项

javascript - 无限滚动后外部 JS 文件函数未加载

javascript - 在 Tumblr 中嵌入 HTML5 视频(仪表板和博客)

Tumblr 博客文章本地化?

ruby - 比较实例变量的相等性

ruby - 如何使用 FasterCSV 更改 CSV 文件中的标题然后保存新标题?