Ruby 和 Twitter:从请求令牌中获取访问令牌?

Hen*_*hiu 2 ruby twitter ruby-on-rails oauth

我目前正处于从尝试通过 Twitter 登录的用户那里获取 oauth 令牌/秘密的处理的第 3 步。https://dev.twitter.com/docs/auth/implementing-sign-twitter

第 3 步告诉我将此请求发送到 API,但我不知道如何执行此操作。我目前同时拥有 oauth_token 和 oauth_verifier,但如何发送此 POST 请求以获取 oauth_token、oauth_token_secret 对?

是否有标准的 Oauth Ruby gem 可用于发送此 POST 请求?我在网上看到我传递一个 @accessToken 对象的例子,但我没有这样的对象可用。我只有 oauth_token 和 oauth_verifier(作为字符串)。鉴于这两件事,我如何将它们转换为 oauth_token 和 oauth_token_secret?

POST /oauth/access_token HTTP/1.1
User-Agent: themattharris' HTTP Client
Host: api.twitter.com
Accept: */*
Authorization: OAuth oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w",
                     oauth_nonce="a9900fe68e2573b27a37f10fbad6a755",
                     oauth_signature="39cipBtIOHEEnybAR4sATQTpl2I%3D",
                     oauth_signature_method="HMAC-SHA1",
                     oauth_timestamp="1318467427",
                     oauth_token="NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0",
                     oauth_version="1.0"
Content-Length: 57
Content-Type: application/x-www-form-urlencoded

oauth_verifier=uw7NjWHT6OJ1MpJOXsHfNxoAhPKpgI8BlYDhxEjIBY
Run Code Online (Sandbox Code Playgroud)

s2t*_*2t2 5

尝试使用twitteroauthgems类似以下的 rails 控制器操作:

  def redirect
    consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, {
      :site => "https://api.twitter.com", 
      :scheme => :header
    })

    request_token = consumer.get_request_token(:oauth_callback => CALLBACK_URL)
    session[:twitter_request_token] = request_token

    redirect_to request_token.authorize_url #=> "https://api.twitter.com/oauth/authorize?oauth_token=XYZ"
  end

  def callback
    request_token = session[:twitter_request_token]

    access_token = request_token.get_access_token(:oauth_verifier => params[:oauth_verifier])
    client = Twitter::REST::Client.new(
      :consumer_key => CONSUMER_KEY,
      :consumer_secret => CONSUMER_SECRET,
      :access_token => access_token.token,
      :access_token_secret => access_token.secret
    )
    twitter_user = client.user

    redirect_to root_url # or do something with the twitter_user
  end
Run Code Online (Sandbox Code Playgroud)

另见:http : //barkingiguana.com/2009/10/13/twitter-oauth-authentication-using-ruby/