我正在使用 Ruby 的 Twitter gem 和 OAuth 来获取用户的 Twitter 帐户访问权限。在我的代码中,我有:
unless @user.twitter_authd?
oauth = Twitter::OAuth.new('token', 'secret')
session[:twitter_request_token] = oauth.request_token.token
session[:twitter_request_secret] = oauth.request_token.secret
@twitter_auth_url = oauth.request_token.authorize_url
end
这里的token和secret填入了我的真实token和secret。当我点击@twitter_auth_url链接时,我被带到Twitter并被要求授权。我点击允许,然后Twitter将我重定向到我的回调URL http://www.mydomain.com/twitter_callback/?oauth_token=fmy2aMvnjVgaFrz37bJ4JuB8r5xN79gsgDQRG4BNY,然后触发以下代码:
oauth = Twitter::OAuth.new('token', 'secret')
logger.info("session[:twitter_request_token] = #{session[:twitter_request_token]}")
logger.info("session[:twitter_request_secret] = #{session[:twitter_request_secret]}")
oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])
session[:twitter_request_token] = nil
session[:twitter_request_secret] = nil
@user.update_attributes({
:twitter_token => oauth.access_token.token,
:twitter_secret => oauth.access_token.secret,
})
redirect_to root_path
推特请求令牌和密钥已经被成功设置。然而,我最终遇到了授权错误:
OAuth::Unauthorized in MainController#twitter_callback
401 Unauthorized
RAILS_ROOT: /Users/TAmoyal/Desktop/RoR_Projects/mls
Application Trace | Framework Trace | Full Trace
/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/consumer.rb:167:in `token_request'
/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/tokens/request_token.rb:14:in `get_access_token'
/Library/Ruby/Gems/1.8/gems/erwaller-twitter-0.6.13.1/lib/twitter/oauth.rb:29:in `authorize_from_request'
/Users/TAmoyal/Desktop/RoR_Projects/mls/app/controllers/main_controller.rb:70:in `twitter_callback'
代码在这一行出错:oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])
当它尝试获取访问令牌时。您可以在此处查看authorize_from_request的源代码。我不确定为什么会发生这种情况。有人有想法吗?
something作为回调URL,那么Twitter会将你的设置默认为“客户端应用程序”。除非你再次进入编辑设置,否则你不会注意到这一点。 - tardate