2013-01-16 76 views
1

我有一个Rails(3.2.11)应用程序,允许用户发布更新到他们的LinkedIn个人资料。我目前正在使用omniauth-linkedin gem来捕获初始用户身份验证,并使用linkedin gem来发布更新。我遇到的问题是LinkedIn访问令牌在60天后过期,但根据它们的documentation,可以在到期之前刷新令牌,而无需用户重新授权应用程序。在到期前刷新LinkedIn令牌omniauth

我已经看过了LinkedIn Tips and TricksAuthentication Overview,并吨帖子StackOverflow上 - thisthis,并this仅仅是一个几个例子 - 我仍然找不到任何答案。

当用户授权应用程序(通过omniauth-linkedin)后,我保存从LinkedIn返回给我的access_tokensecret。我需要弄清楚如何使用仍然有效的access_token来刷新它,并将过期日期延长60天。

我利用LinkedIn的身份验证的端点(其中tokens.access_token是当前有效令牌)的尝试:

url = "https//www.linkedin.com/uas/oauth/authenticate?oauth_token=" + tokens.access_token 
result = RestClient.post(url, {oauth_callback: "http://localhost:3000/users/auth/linkedin/callback"}) 

,但我得到一个undefined method 'request_uri' for #<URI::Generic:0x1b144d20>异常。

我使用的OAuth ::消费客户(其中tokens.access_tokentokens.token_secret是当前有效的令牌)的尝试:

configuration = { site: 'https://api.linkedin.com', authorize_path: '/uas/oauth/authenticate', 
        request_token_path: '/uas/oauth/requestToken', access_token_path: '/uas/oauth/accessToken' } 
consumer = OAuth::Consumer.new(ENV['LINKEDIN_APP_ID'], ENV['LINKEDIN_SECRET'], configuration) 
access_token = OAuth::AccessToken.new(consumer, tokens.access_token, tokens.token_secret) 

但这只是给我回相同access_tokensecret

最后,我希望能够利用现有的omniauth-linkedin宝石功能来处理这种刷新,如果这是可能的任何想法?谢谢!

回答

4

在第二种方法中(使用OAuth :: Consumer客户端并传入您现有的访问令牌和密钥)应为您刷新令牌。正如文档所述,只要当前用户登录LinkedIn.com并且当前访问令牌尚未过期,令牌将被刷新。

这并不意味着你会得到一个新的令牌。你可能会得到和以前一样的东西。关键的区别是,令牌的使用寿命应该是60天。您可以通过检查oauth_expires_in参数的值来验证此情况。它应该被设置为5184000.

本博客文章将详细介绍刷新令牌:https://developer.linkedin.com/blog/tips-and-tricks-refreshing-access-token

+0

我想同样的方法,并返回我通过在相同的令牌和秘密,但是'params'是为空,所以我无法验证我的令牌的到期日期是否从现在起重置为60天。 – ACIDSTEALTH