0

我正在尝试将用户重定向到请求访问用户信息的权限的 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 https://graph.facebook.com/oauth/authorize?client_id=*id*&redirect_uri=http://localhost:3000/auth/auth2&scope=publish_stream

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

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

4

3 回答 3

0

我最近遇到了类似的问题。为了使您的应用程序脱离 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 令牌。这可以很容易地检测用户是否已授权该应用程序,并且您可以避免每次用户访问您的应用程序时向他/她发送授权页面。

于 2011-09-04T18:22:59.293 回答
0

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

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

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

于 2011-05-31T05:39:28.063 回答
0

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

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

于 2011-05-29T20:06:18.997 回答