我目前正在尝试为我们的注册系统编写一个添加好友的步骤,并且我被要求实现类似于foursquare工作方式的东西。
它从Facebook上拉出你的朋友,检查他们是否已经在foursquare网站上,然后询问你是否想和他们联系。
实现这种功能的最好方法是什么?
我已经看到了FB JS SDK的例子,但是我更喜欢一个更集成的方法。
谢谢亚当
我发现最好的方法是使用带有oauth和fb_graph gems的设计(如这里和这里指定的)。我有一个版本问题,所以我的gemfile配置看起来像这样:
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'omniauth', '>=0.2.0.beta'
gem 'oa-oauth', :require => 'omniauth/oauth'
gem 'fb_graph'
(我的配置相当旧——可能最新的分支现在以一种更开箱即用的方式支持全功能)
my design initializer:
config.omniauth :facebook_publish, "APP_ID", "APP_SECRET"
在你的User模型中:
devise :omniauthable
和
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
data = access_token['extra']['user_hash']
if user = User.find_by_email(data["email"])
user
else # Create a user with a stub password.
User.create(:email => data["email"], :password => Devise.friendly_token[0,20])
end
end
如果想要facebook连接,请转到path:
user_omniauth_authorize_path(:facebook)
基本上,这就是连接所需的全部内容。为了得到图形,我现在使用:
facebook_user = FbGraph::User.new('me', :access_token => access_token['credentials']['token']).fetch
对于朋友:
facebook_user.friends
就是这样。