【问题标题】:What is Facebook callback_url and how to use it in rails?什么是 Facebook callback_url 以及如何在 Rails 中使用它?
【发布时间】:2016-08-21 02:50:08
【问题描述】:

我在 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'?

OauthController中的callback方法应该写什么,它是干什么用的?谢谢

【问题讨论】:

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


    【解决方案1】:

    Callback Url 是您的应用程序 url - 一个 GET 路由 - 您希望第三方应用程序在完成其工作后重定向到。

    所以在你的 routes.rb 文件中简单地创建一个 get 路由

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

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

    【讨论】:

      【解决方案2】:

      是的,你应该这样做。 基本上,OAuth 使用回调数据为验证用户提供令牌。

      例如

      • 用户点击“登录”(或其他)链接,您的应用会将他们重定向到 OAuth 提供程序(或在 iframe 中打开)。
      • 用户允许您的应用使用他们的个人资料详细信息
      • OAuth 提供商使用唯一代码向您的应用发送回调
      • 应用使用该代码获取 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&amp;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 了解更多信息。

      【讨论】:

      • @Stephen,如果有用,请将我的回答标记为正确。非常感谢!
      • 您好,感谢您的回答。你能解释一下逻辑吗,例如,如何让 Facebook 用户名显示在index.html 页面中。谢谢
      • 当然,我用示例gist.github.com/retgoat/93a83f3ed620b9f99242cb34c70165e2创建了一个要点
      • 感谢您的示例,实际上我的问题集中在如何获得codes and auth_tokens。目前我了解url_for_oauth_code 需要由用户在浏览器上单击并打开。我正在处理api 项目,这就是我不理解这一步的原因,因为不存在视图。哈哈,我知道你为controllerview 编写的基本rails 实现。
      • 啊,抱歉 :) 只是误解了您的评论。实际上,即使您有 API 项目,也应该重定向用户。在这种情况下,您应该返回一个重定向 url,并且前端部分应该将 window.location 更改为它。请看一下我之前提供的要点。我更新了。
      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2015-03-13
      • 2013-10-25
      • 2014-11-19
      相关资源
      最近更新 更多