什么是Facebook callback_url以及如何在rails中使用它?

时间:2016-04-27 02:13:56

标签: ruby-on-rails ruby facebook facebook-graph-api oauth

我在我的rails项目中使用Facebook Graph API,无论我使用oauth2 gem还是koala,都需要callback_url

的oauth2

token = client.auth_code.get_token('code_value', :redirect_uri => 'http://localhost:8080/oauth/callback')

考拉

@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)

我尝试在我的项目中使用http://localhost:3000/callback,但它无效。

我应该为此制定路线吗?

喜欢:get 'callback' => 'oauth#callback'

我应该在callback中的OauthController方法中写一下,它用于什么?感谢

2 个答案:

答案 0 :(得分:2)

是的,你应该。 基本上,OAuth使用回调数据来提供用于验证用户身份的令牌。

例如

  • 用户点击“登录”(或其他)链接,您的应用会将其重定向到OAuth提供商(或在iframe中打开)。
  • 用户允许您的应用使用他们的个人资料详情
  • OAuth提供商使用唯一代码向您的应用发送回调
  • app使用该代码获取API通信的安全访问令牌

这只是一个基本的例子。

在您的情况下,您需要实现将解析回调数据的控制器。

以下是代码示例

@oauth = Koala::Facebook::OAuth.new(api_key, app_secret, callback_url)
=> #<Koala::Facebook::OAuth:0x007fc919d014e0 @app_id=1234567890, @app_secret="FaKeAppSecretKey", @oauth_callback_url="http://localhost:3000/callback">

@oauth.url_for_oauth_code
=> "https://www.facebook.com/dialog/oauth?client_id=893637180663238&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback"

当你去https://www.facebook.com/dialog/oauth?client_id=893637180663238&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback时,FB会将你重定向到

http://localhost:3000/callback?code=CODE_FROM_CALLBACK

然后你应该使用使用代码来获取访问令牌的工具控制器

access_token = @oauth.get_access_token(params[:code])
=> "ACCESS_TOKEN"

@graph = Koala::Facebook::API.new(access_token)
 => #<Koala::Facebook::API:0x007fc91a903ae0  @access_token="ACCESS_TOKEN", @app_secret=nil>

profile = @graph.get_object("me")
=> {"id"=>"4492344324865", "email"=>"my_fake_email_address@gmail.com", "first_name"=>"Roman", "gender"=>"male", "last_name"=>"Sotnikov", "link"=>"https://www.facebook.com/app_scoped_user_id/4492344324865/", "locale"=>"en_US", "name"=>"Roman Sotnikov", "timezone"=>6, "updated_time"=>"2015-05-18T05:19:54+0000", "verified"=>true}

请查看https://github.com/arsduo/koala/wiki/OAuth以获取更多信息。

答案 1 :(得分:1)

回调网址是您的应用程序网址 - 一条GET路由 - 您希望第三方应用程序在完成其工作后重定向到。

所以在你的routes.rb文件中只需创建一个get route

get 'facebook_graph_callback', to: 'controller_name#action'
#A get route which is connected to a controller action

通常第三方会给你一些回复信息。通常是它的某种代码。在您的控制器操作中,您可以使用params哈希查找它们。