使用 RoR 弃用了 facebook 上的offline_access
我们的 RoR 应用程序存在问题。我们使用omniauth 进行facebook 身份验证,并使用Koala 搜索用户好友。但最近,当我们尝试显示朋友照片时,我们收到此错误:
Koala::Facebook::APIError in Homes#show
Showing /home/daniel/Homes/app/views/shared/_event.html.erb where line #19 raised:
OAuthException: Error validating access token: Session has expired at unix time 1328727600. The current unix time is 1328802133.
Extracted source (around line #19):
16: <img src="../assets/friends-icon.png" alt="User profile apicture" height="33" width="43">
17: <% if current_user %>
18: <% event.friends_in_event(@person).each do |f| %>
19: <%= link_to(image_tag(f.fb_picture, :size => "43x33"), person_path(f.id)) %>
20: <% end %>
21: <% end %>
22: </div>
身份验证工作正常,但 facebook 已弃用离线访问选项,该选项工作正常,但现在我们遇到了这个问题。 有什么方法可以扩展access_token吗?或者还有其他解决方案吗?
这是我们的omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FB_KEY'], ENV['FB_SECRET'],
{ :scope => 'email,offline_access,user_photos,publish_stream',
:client_options => { :ssl => { :ca_path => "/etc/ssl/certs" } } }
end
和我们的koala.rb
Koala.http_service.http_options = {
:ssl => { :ca_path => "/etc/ssl/certs" }
}
提前致谢。
We have a problem in our RoR app. We are using a facebook authentication with omniauth, and searching the user friends with Koala. But lately, when we try to show a friend photo, we got this error:
Koala::Facebook::APIError in Homes#show
Showing /home/daniel/Homes/app/views/shared/_event.html.erb where line #19 raised:
OAuthException: Error validating access token: Session has expired at unix time 1328727600. The current unix time is 1328802133.
Extracted source (around line #19):
16: <img src="../assets/friends-icon.png" alt="User profile apicture" height="33" width="43">
17: <% if current_user %>
18: <% event.friends_in_event(@person).each do |f| %>
19: <%= link_to(image_tag(f.fb_picture, :size => "43x33"), person_path(f.id)) %>
20: <% end %>
21: <% end %>
22: </div>
The authentication works good, but facebook has already deprecated the offline_access option, that was working good, but now, we have this issue.
is It any way to extends the access_token?, or are there another solution?.
This is our omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FB_KEY'], ENV['FB_SECRET'],
{ :scope => 'email,offline_access,user_photos,publish_stream',
:client_options => { :ssl => { :ca_path => "/etc/ssl/certs" } } }
end
And our koala.rb
Koala.http_service.http_options = {
:ssl => { :ca_path => "/etc/ssl/certs" }
}
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此问题有 2 个解决方案:
https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN
OAuthException
并请求新的访问权限令牌:access_token
调用图表。access_token
就可以了。如果抛出OAuthException
,则将用户重定向到https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=CALLBACK_URL
CALLBACK_URL
,并在参数中包含代码
。code
向以下网址发送帖子以获取新的access_token
:https://graph.facebook.com/oauth/access_token? client_id=APP_ID&redirect_uri=CALLBACK_URL&client_secret=APP_SECRET&code=CODE&display=popup
阅读他们的开发博客上的帖子以了解更多信息。
编辑(添加示例 Ruby on Rails 代码):
将以下内容添加到您的
ApplicationController
顶部:将以下
protected
方法添加到您的>ApplicationController
:Koala 调用均取自以下 2 个教程:
There are 2 solutions to this problem:
https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN
OAuthException
and request a new access token:access_token
.access_token
is fine. If it throws anOAuthException
, redirect the user tohttps://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=CALLBACK_URL
CALLBACK_URL
with acode
in the parameters.code
to obtain a newaccess_token
:https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=CALLBACK_URL&client_secret=APP_SECRET&code=CODE&display=popup
Read the post on their dev blog for more information.
Edit (adding example Ruby on Rails code):
Add the following to the top of your
ApplicationController
:Add the following
protected
method to yourApplicationController
:The Koala calls were all taken from the following 2 tutorials:
对于那些没有时间进行此更改的人,我发现您可以在“设置”->“设置”中禁用此迁移。先进的。该选项的名称是“删除离线访问权限:”
For those of you who don't have time to make this change, I found that you can disable this migration in Settings -> Advanced. The name of the option is "Remove offline_access permission:"