标签: koala

Facebook令牌到期和更新,与考拉和omniauth-facebook

我正在编写一个Rails应用程序,该应用程序使用omniauth-facebook来针对FB对用户进行身份验证(以及为用户获取FB OAuth访问令牌).然后,应用程序使用Koala使用保存的OAuth令牌对FB Graph API进行各种调用.

每次用户重新进行身份验证时(通常在他们登录我的应用程序时),我都会更新已保存的令牌.即便如此,保存的令牌也会不时到期(或以其他方式变为无效).

在使用考拉时,防止身份验证失败和更新令牌的最佳做法是什么?

是否所有调用都包含在begin/rescue块中,并使用异常处理程序对FB进行重新验证?

是否有某种方式(使用Koala)来利用此处描述的"扩展访问令牌"流程?如果没有,是否有编写自己的代码以从Koala调用中自己提取新令牌的最佳实践?

ruby-on-rails omniauth koala

22
推荐指数
2
解决办法
8058
查看次数

使用Koala续订Facebook访问令牌

Koala在Ruby on Rails应用程序上使用gem

我在通过Koala使用的数据模型上有以下代码:

@graph = Koala::Facebook::GraphAPI.new(token_secret)
friends = @graph.get_connections("me", "friends")
Run Code Online (Sandbox Code Playgroud)

其中,token_secret来自于我的一个字段users的表,保存在登录.

它工作正常但几分钟后我得到:

Koala::Facebook::APIError (OAuthException: Error validating access token: Session has expired at unix time 1327438800. The current unix time is 1327442037.):
Run Code Online (Sandbox Code Playgroud)

我找到了在前面用这些方法更新这个令牌的方法,Facebook JS SDK但是这个方法我在控制器上调用了朋友列表.

如何更新token_secret使用考拉?这可能吗?

facebook-javascript-sdk ruby-on-rails-3 koala

18
推荐指数
2
解决办法
9374
查看次数

如何让考拉与Omniauth一起玩得很好?

我正试图让考拉与Omniauth合作.用户模型使用Omniauth登录Facebook,我想使用Koala作为客户端来提取正在使用该应用程序的用户的朋友列表.我似乎没有正确保存令牌:

调节器

@friends = Array.new
 if current_user.token
   graph = Koala::Facebook::GraphAPI.new(current_user.token)
   @profile_image = graph.get_picture("me")
   @fbprofile = graph.get_object("me")
   @friends = graph.get_connections("me", "friends")
end
Run Code Online (Sandbox Code Playgroud)

DB Schema

create_table "users", :force => true do |t|
  t.string   "provider"
  t.string   "uid"
  t.string   "name"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "token"
end
Run Code Online (Sandbox Code Playgroud)

用户模型有

def self.create_with_omniauth(auth)  
  create! do |user|  
    user.provider = auth["provider"]  
    user.uid = auth["uid"]  
    user.name = auth["user_info"]["name"]  
  end  
end
Run Code Online (Sandbox Code Playgroud)

Koala.rb初始化程序有:

module Facebook
  CONFIG = YAML.load_file(Rails.root.join("config/facebook.yml"))[Rails.env]
  APP_ID = CONFIG['app_id']
  SECRET = CONFIG['secret_key']
end

Koala::Facebook::OAuth.class_eval do
  def initialize_with_default_settings(*args)
    case args.size
      when …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails facebook-graph-api omniauth ruby-on-rails-3 koala

10
推荐指数
1
解决办法
5629
查看次数

Rails考拉宝石和朋友数

有人可以帮助我获得total_count的用户朋友吗?

u.facebook.get_connection("me", "friends",api_version:"v2.0")
Run Code Online (Sandbox Code Playgroud)

这返回0因为它返回也使用我的应用程序的朋友.

但是在api 2.0 facebook中,将total_count字段与朋友号码一起给出

{
  "data": [
  ], 
  "summary": {
    "total_count": 455
  }
}
Run Code Online (Sandbox Code Playgroud)

我如何通过考拉宝石获得这个?

u.facebook.get_connection("me", "friends/#{summary}",api_version:"v2.0")
Run Code Online (Sandbox Code Playgroud)

这个返回错误.

答案如果有人会搜索这个:

facebook.get_connection("me", "friends",api_version:"v2.0").raw_response["summary"]["total_count"]
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails facebook-graph-api koala

10
推荐指数
1
解决办法
876
查看次数

来自Ruby on Rails的Facebook app邀请

有没有办法从Ruby on Rails发布Facebook应用程序邀请,例如通过部署Koala?

一眼看上去是不可能的.除了简单地发布到墙上之外的任何变通方法?

facebook ruby-on-rails facebook-graph-api koala

9
推荐指数
1
解决办法
4739
查看次数

Rails - Facebook与Omniauth和Koala:如何续订过期的令牌

我有一个应用程序,用户可以链接他们的Facebook帐户.他们可以使用他们的电子邮件登录,但他们可以链接他们的Facebook帐户.

在我显示链接的社交网络(Facebook和其他)的视图中,我有这样的事情:

<%= image_tag @facebook.get_facebook_picture %>
Run Code Online (Sandbox Code Playgroud)

这将调用这样的实例方法:

def get_facebook_picture
    unless self.token.nil?
      facebook_graph = Koala::Facebook::GraphAPI.new(self.token)
      fb_picture = facebook_graph.get_picture("me", { :type => "small" })
    end
end
Run Code Online (Sandbox Code Playgroud)

这将很有效,除非我存储在我的数据库中的Facebook令牌已过期.所以我在上述控制器中添加了这个异常处理程序:

def facebook_exception_handler exception
    if exception.fb_error_type.eql? 'OAuthException'
      # Let's get a new auth token... How?
    else
      logger.debug "Damn it. We don't know what error is coming from FB"
      raise exception
    end
end
Run Code Online (Sandbox Code Playgroud)

我正确地捕获了异常,但是我没有看到如何更新我在数据库中的访问令牌.请注意,我使用OmniAuth插入了我的访问令牌.所以我的问题是:

鉴于我有,我OAuthException如何使用Omniauth续订特定用户(UID)的访问令牌?

facebook ruby-on-rails access-token omniauth koala

8
推荐指数
1
解决办法
4146
查看次数

OAuthException:此授权代码已被使用 - Facebook

似乎Facebook在12月5日的新版本给我带来了一些问题.是否有其他人收到此错误?

Koala :: Facebook :: APIError(OAuthException:此授权码已被使用.)

我能够oauth,但是当我发出呼叫时,执行以下操作......我得到了错误.即以下:

@friends = graph.get_object("/me/friends")
Run Code Online (Sandbox Code Playgroud)

这是Facebook更新:

OAuth授权码的新安全限制我们只允许一次授权代码交换访问令牌,并要求在创建后的10分钟内将其交换为访问令牌.这与OAuth 2.0规范一致,从一开始就说"授权代码必须是短期和单次使用".有关更多信息,请查看我们的身份验证文档.

如果有人可以提供帮助,或者甚至更具体地说明Facebook更新的含义,那将非常有帮助.我正在使用Rails考拉宝石.

这似乎在这里报道,但没有答案有帮助.

http://developers.facebook.com/bugs/121266004701942?browse=search_50c113068fae60719135553

ruby-on-rails facebook-graph-api koala koala-gem

8
推荐指数
1
解决办法
4779
查看次数

Facebook Graph API 2.0创建事件

根据facebook,截至2014年4月30日,该create_event方法已不再可用,我认为这意味着无法发布事件?

https://developers.facebook.com/docs/apps/changelog

create_event不再可用.

是否仍然可以使用v1.0?(将于2015年4月30日逐步淘汰).我找不到任何示例,我想代表facebook页面发布活动.这还有可能吗?

https://developers.facebook.com/docs/graph-api/reference/v1.0/page/events

当我尝试它时,我得到折旧警告和冒充使用令牌的页面,但是当我使用我的个人令牌时它也失败了.可能是因为我没有create_event权限(尽管请求它,它不会显示在facebook令牌调试器中)

Deprecation warning: The REST API is now deprecated; please use the equivalent Graph API methods instead.  See http://developers.facebook.com/blog/post/616/.
=> {"error_code"=>190,
 "error_msg"=>"Impersonated access tokens can only be used with the Graph API",
Run Code Online (Sandbox Code Playgroud)

权限:

[{"permission"=>"installed", "status"=>"granted"},
 {"permission"=>"public_profile", "status"=>"granted"},
 {"permission"=>"manage_pages", "status"=>"granted"},
 {"permission"=>"publish_actions", "status"=>"granted"}]
Run Code Online (Sandbox Code Playgroud)

facebook facebook-graph-api koala koala-gem

8
推荐指数
1
解决办法
3123
查看次数

如何使用来自SERVER(!)的Koala Gem更新/延长Facebook访问令牌,完全没有用户交互

我的情况和我所拥有的:

  1. Rails应用程序(Rails的最新版本)
  2. 考拉宝石(上一版)
  3. 1(一)Facebook用户(例如 - 这是我),就是这样,没有更多的用户(!)
  4. 没有任何FB登录表单/类似内容的网站页面

现在的情况:

我在一个网站上创建页面,我的代码应从我的Facebook帐户中提取最后的帖子并在该页面上显示.

我已经做了什么:

  1. 我添加了考拉宝石
  2. 然后我在FB的开发者帐户下创建了应用程序,并授予该应用程序对我的个人资料的完全访问权限(相同的个人资料 - 开发人员和我希望提取帖子)
  3. 然后我从这里创建了应用程序访问令牌(https://developers.facebook.com/tools/accesstoken) - 当我调试它时,FB告诉我,这个令牌是一个短期令牌,在1小时后到期.
  4. 然后我在我的模型中创建了该代码:

    oauth = Koala::Facebook::OAuth.new(APP_ID, APP_SECRET)
    new_access_info = oauth.exchange_access_token_info self.get_token <- here i pull token from DB
    
    new_access_token = new_access_info["access_token"]
    new_access_expires_at = DateTime.now + new_access_info["expires"].to_i.seconds
    
    self.update_all(:token => new_access_token) ***<- saving token in db***
    self.update_all(:exp => new_access_expires_at) ***<- saving expiration of token in db***
    
    @facebook ||= Koala::Facebook::API.new(self.get_token)
    
    Run Code Online (Sandbox Code Playgroud)

所以,我第一次将我的短期令牌直接放在db中,所以我的代码可以从那里拉出来,然后,当我重新加载页面时,我得到了新的,长期令牌(它有截止日期12/01/2015) .

但!当我每次重新加载页面时,我会获得新令牌,但是有SAME到期日期(FB的调试器说我一样,当我从我的页面复制令牌并将其粘贴到调试器中时).

我甚至试图在不同的日子里做这件事,因为我读到"某个地方"令牌翻新期是每天一次,但是:

令牌总是不同,但有效期始终相同.

我需要的:

更新该令牌或编写代码,以便自动更新令牌而无需我的操作,因为没有登录窗口或类似的东西.它应该只在服务器端工作.

有什么想法吗?已经阅读了很多信息和类似的问题,但大多数问题都与用户交互有关,比如以适当的形式登录等等,所以 - 没有运气:/

authentication facebook ruby-on-rails omniauth koala

7
推荐指数
1
解决办法
1393
查看次数

如何让facebook页面管理员只选择他们希望我的应用管理的特定页面(manage_pages)

我正在使用Ruby on Rails和Koala gem构建一个facebook应用程序来构建我自己的登录流程.

https://github.com/arsduo/koala https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/

我的问题非常简单.

假设以下情况:

- 尝试连接到我的应用程序的用户有多个他们管理的Facebook页面.我希望他们能够只选择他们希望我管理的特定页面,同时拒绝访问其余页面.

原因是很多将使用我的应用程序的管理员管理大量页面.当我只需要一小部分页面的权限时,我无法想象他们可以获得所有页面的权限.

我正在使用Ruby on Rails

ruby facebook ruby-on-rails facebook-graph-api koala

7
推荐指数
1
解决办法
76
查看次数