2011-04-13 74 views
4

我在无意识的脱发点我试图刷新红宝石雅虎OAuth访问令牌。帮助提神雅虎的OAuth访问令牌在Ruby中

使用OmniAuth和OAuth的宝石,我能够得到雅虎的访问令牌,但它在一个小时后到期。

我正在关注的雅虎指令refresh an expired token,和我始终返回401

如果有人能告诉我如何刷新访问使用OAuth的宝石的道理,我会大大赞赏。

+1

您还可以在WWW-验证响应 - 从雅虎发送的标题,以查看有关401响应返回原因的更多信息。它会说类似“oauth_problem = timestamp_refused”或“oauth_problem = parameter_absent&oauth_parameters_absent = oauth_timestamp”。 – Crashthatch 2011-07-01 11:01:07

回答

4

首先,请确保您从原来的get_access_token调用保存oauth_session_handle参数。

然后,当你正在寻找刷新的access_token做这样的事情:

request_token = OAuth::RequestToken.new(consumer, 
             config["ACCESS_TOKEN"],    
             config["ACCESS_TOKEN_SECRET"]) 
token = OAuth::Token.new(config["ACCESS_TOKEN"], 
         config["ACCESS_TOKEN_SECRET"]) 
@access_token = request_token.get_access_token(
         :oauth_session_handle => config["SESSION_HANDLE"], 
         :token => token) 

...其中...

config["ACCESS_TOKEN"] is your old access token 
config["ACCESS_TOKEN_SECRET"] is your old secret 
config["SESSION_HANDLE"] is your oauth_session_handle 
consumer is your OAuth::Consumer.new reference 

我存储在一个YAML文件中的配置变量和然后在启动时加载它。

记住的@access_token存储下一次。

我在YDN OAuth Forum适应这种从一个答案。

+0

完美的作品,谢谢! – Chris 2011-09-30 13:35:22

+0

出色地工作! – Sid 2012-10-28 20:50:04

+0

SESSION_HANDLE是必要的。在我的代码中,我错过了它,所以也得到“token_rejected” – Stony 2014-08-11 08:44:45

1

注:oauth_session_handle返回为一个PARAM通过调用get_access_token:

access_token   = request_token.get_access_token(:oauth_verifier => oauth_verifier) 
oauth_session_handle = access_token.params['oauth_session_handle'] 

这是不到明显从看oauth-ruby/oauth代码