Facebook和RoR:如何重定向到授权URL?

Facebook和RoR:如何重定向到授权URL?,facebook,authorization,koala,Facebook,Authorization,Koala,我试图将用户重定向到请求访问用户信息权限的URL 我有一个表单的视图,其操作如下: class AuthController < ApplicationController def auth @oauth = Koala::Facebook::OAuth.new("*id*", "*secret*", 'http://localhost:3000/auth/auth2') address = @oauth.url_for_oauth_code(:permiss

我试图将用户重定向到请求访问用户信息权限的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
class-AuthController“发布\u流”)
放入“地址#{address}”
重定向到地址
返回
结束
def auth2
结束
结束
在标准输出上,地址显示为:
重定向到_id=*id*&redirect\u uri=http://localhost:3000/auth/auth2&scope=publish_stream

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


我希望看到权限页面,一旦用户允许,请求就会转发到我的重定向uri。

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


看看是不是这样。

我只是想把问题的答案贴出来。解决办法其实很简单。我不需要重定向到控制器中的授权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的人能够解释原因,请告诉我。

我最近遇到了类似的问题。为了将应用程序从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
def facebook\u授权

redirect\u url=谢谢Gats。我的画布类型是iframe而不是fbml。我正在做重定向服务器端。文件上说fb:redirect是针对传统FBML应用的。还有一件事要补充,我被重定向到一个带有facebook图标的页面和一个指向facebook的链接。单击该链接将带我进入应用程序的授权页面。但是我想直接去那里,而不是通过这个中间页面。不确定iFrame的解决方案是什么。我想你需要检查一个用户是否是a:已登录且B:已授权的,然后直接发送给他们。如果用户登录到facebook,我不知道你没有立即看到身份验证页面。对不起,我帮不了你了。
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