【问题标题】:Facebook and RoR: how to redirect to authorization URL?Facebook 和 RoR:如何重定向到授权 URL?
【发布时间】:2011-05-29 19:42:18
【问题描述】:

我正在尝试将用户重定向到请求访问用户信息的权限的 URL。

我有一个表单视图,其操作如下:

class AuthController < ApplicationController

   def auth
     @oauth = Koala::Facebook::OAuth.new("*id*", "*secret*", 'http://localhost:3000/auth/auth2') 
     address = @oauth.url_for_oauth_code(:permissions => "publish_stream")
     puts "address  #{address}"
     redirect_to address
     return  
   end

   def auth2

   end

end

stdout,地址显示为:Redirected to @987654321@_id=*id*&amp;redirect_uri=http://localhost:3000/auth/auth2&amp;scope=publish_stream

如果我在浏览器中单独输入此 URL(而不是通过我的应用程序),我会被带到应用程序请求权限的正确页面。但是,通过我的应用程序,我被带到一个显示 Facebook 徽标的页面,而不是请求权限的页面。

我希望看到权限页面,然后一旦用户允许,请求就会转发到我的 redirect_uri。

【问题讨论】:

    标签: facebook authorization koala


    【解决方案1】:

    您是使用 fbml 进行重定向还是尝试在服务器端进行重定向?如果您的应用程序是画布页面并且您正在重定向服务器端,那么您只是重定向 facebook,而不是用户。您需要确保您实际上是在告诉 facebook 进行重定向。

    如果是这种情况,请查看fb:redirect

    【讨论】:

    • 谢谢盖茨。我的画布类型是 iframe 而不是 fbml。我正在做重定向服务器端。文档说 fb:redirect 适用于旧版 FBML 应用程序。
    • 还要补充一点,我被重定向到带有 facebook 图标和 Go to Facebook 链接的页面。单击该链接会将我带到我的应用程序的授权页面。但我想直接去那里,而不是通过这个中间页面。
    • 不确定 iframe 的解决方案是什么。我怀疑您需要查看用户是否 A:已登录且 B:已授权,然后直接发送。如果用户登录到 facebook,我不知道您没有立即看到什么身份验证页面。抱歉,我帮不上忙。
    【解决方案2】:

    我只是想发布我的问题的答案。解决方案实际上很简单。我不需要在我的控制器中重定向到授权 uri,而是需要在我的视图中进行如下操作。这避免了中间登录页面,并且似乎是遇到此特定问题的其他人正在做的事情(提供中间 facebook 页面而不是将用户直接传递到授权页面。)

    top.location.href="https://graph.facebook.com/oauth/authorize?client_id=client_id&redirect_uri=http://localhost:3000/xxx&scope=publish_stream"; 脚本>

    我不能说我理解它为什么重要并且我不能在控制器中重定向。因此,如果有人使用 RoR 可以解释原因,请告诉我。

    【讨论】:

      【解决方案3】:

      我最近遇到了类似的问题。为了将您的应用程序从 iframe 中分离出来并从 Rails 中的服务器端重定向重定向到授权页面,您可以执行以下操作:

      def facebook_authorization
        redirect_url =<<-EOS
          <script>
            top.location.href='https://graph.facebook.com/oauth/authorize?client_id=client_id&redirect_uri=http://localhost:3000/xxx&scope=publish_stream';
          </script>
         EOS       
      
         render :inline => redirect_url
      end
      

      这与使用 php 的 facebook 文档中描述的方式几乎相同。

      此外,如果用户授权您的应用,您将在 signed_request 响应参数中获得 oauth_access 令牌。我不使用考拉,所以不确定他们如何解析签名的请求。

      通过测试,我发现只要用户授权您的应用程序,您就会在每次请求时从 facebook 获取 oauth_access 令牌。这样可以轻松检测用户是否已授权该应用,并且您可以避免在用户每次访问您的应用时向他/她发送授权页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-20
        • 1970-01-01
        • 2017-04-22
        • 2011-09-09
        • 1970-01-01
        • 2012-03-20
        相关资源
        最近更新 更多