【问题标题】:Ruby and Twitter: Getting Access Token from Request Token?Ruby 和 Twitter:从请求令牌中获取访问令牌?
【发布时间】:2014-02-17 14:32:32
【问题描述】:

我目前正处于从尝试通过 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

【问题讨论】:

  • 我的回答有帮助吗?

标签: ruby-on-rails ruby twitter oauth


【解决方案1】:

使用twitteroauth gems 尝试以下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/

【讨论】:

  • 感谢您的拯救!
  • 在 def 回调 request_token = session[:twitter_request_token] 中显示 null .. 我这里有什么遗漏吗?
【解决方案2】:

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

我个人使用集成了DeviseTwitter gem 的Omniauth 来访问Twitter - 效果很好。

希望这会有所帮助, 欧根

【讨论】:

    【解决方案3】:

    常见的流程如下:

    1. 你在twitter development page注册你的应用程序。

    2. 然后为您的应用程序设置正确的 NameDescriptionWebsite 值。

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

    4. 为你的应用设置回调 URL:

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

      Consumer key:
      
      Consumer secret:
      
      Access token:
      
      Access token secret:
      
    6. 使用 devise 或类似 devise 的 gem 使用指定的 twitter 密钥和密钥在您的站点上设置路由,以启用身份验证引擎。路由列表现在应包含 /auth/twitter 路径。

    7. 通过转到http://your_app_domain.zone:3000/auth/twitter,您将被重定向到 twitter 站点,并使用传递的 oauth_token 回到您的站点

    但是

    您只需接收这些密钥和秘密,然后将其应用到您的应用中,避免 67 点:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2019-11-08
      • 2019-09-16
      • 1970-01-01
      • 2012-12-29
      • 2013-08-10
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      相关资源
      最近更新 更多