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

时间:2014-01-26 21:10:03

标签: ruby-on-rails ruby twitter 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

3 个答案:

答案 0 :(得分:4)

使用twitteroauth宝石尝试以下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

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

答案 1 :(得分:0)

是的,有Omniauth gem用于Twitter的身份验证。文档很简单。

我个人使用与Devise集成的Omniauth和Twitter gem来访问Twitter - 效果非常好。

希望这有帮助, 欧根

答案 2 :(得分:0)

常见程序如下:

  1. 您可以在twitter development page上注册您的应用。

  2. 然后为您的应用设置正确的名称描述网站值。

    App Name
    
    App Description
    
    http://your_app_domain.zone:3000/
    
  3. 更改应用程序类型是您的应用程序,默认情况下它具有只读访问类型。

  4. 为yuor应用程序设置回调URL:

    http://your_app_domain.zone:3000/auth/twitter/callback
    
  5. 存储在 OAuth工具推特页面上所有的所有密钥和秘密:

    Consumer key:
    
    Consumer secret:
    
    Access token:
    
    Access token secret:
    
  6. 使用指定的Twitter密钥在设计设计类似宝石的网站上设置路由,并使用密码启用身份验证引擎。路线列表现在应包括 / auth / twitter 路径。

  7. 转到http://your_app_domain.zone:3000/auth/twitter,您将被重定向到Twitter网站,并通过oauth_token

  8. 退回到您的网站

    <强>但是

    您可以简单地接收这些密钥和密钥,然后在您的应用中应用,避免 6 7 点:

    client = Twitter::REST::Client.new do |config|
       config.consumer_key        = "YOUR_CONSUMER_KEY"
       config.consumer_secret     = "YOUR_CONSUMER_SECRET"
       config.access_token        = "YOUR_ACCESS_TOKEN"
       config.access_token_secret = "YOUR_ACCESS_SECRET"
    end