我有一个 Rails (3.2.11) 应用程序,允许用户发布更新到他们的 LinkedIn 个人资料。我目前正在使用omniauth-linkedin
gem 来捕获初始用户身份验证,并使用linkedin
gem 来发布更新。我遇到的问题是 LinkedIn 访问令牌在 60 天后过期,但根据他们的文档,可以在过期之前刷新令牌,而无需用户重新授权应用程序。
我查看了 LinkedIn提示和技巧、身份验证概述以及 StackOverflow 上的大量帖子——this 、this和this只是几个示例——但我仍然找不到任何答案。
在用户授权应用程序(通过omniauth-linkedin
)后,我保存access_token
并secret
从 LinkedIn 返回给我。我需要弄清楚如何使用仍然有效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::Consumer 客户端(当前有效的令牌在哪里tokens.access_token
并且是):tokens.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_token
和secret
。
最后,我希望能够利用现有的omniauth-linkedin
gem 功能来处理这个刷新,知道这是否可能吗?谢谢!