2011-05-29 78 views
0

我正在尝试将用户重定向到请求访问用户信息权限的URL。Facebook和RoR:如何重定向到授权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。

回答

0

你是否使用fbml进行重定向或试图做到服务器端?如果你的应用是一个画布页面,并且你正在重定向服务器端,那么你只能重定向Facebook,而不是用户。你需要确保你确实告诉Facebook做重定向。

如果是这样,请退房fb:redirect

+0

Thanks Gats。我的画布类型是iframe而不是fbml。我正在做重定向服务器端。该文件说fb:重定向是针对传统的FBML应用程序。 – Mariam 2011-05-29 21:00:20

+0

还有一件事要补充,我被重定向到一个带有Facebook图标和转到Facebook的链接的页面。点击该链接将我带到我的应用的授权页面。但我想直接去那里,而不是通过这个中间页面。 – Mariam 2011-05-29 21:27:16

+0

不确定iframe的解决方案。我怀疑你需要看看检查一个用户是否是A:登录和B:已经授权,然后直接发送它们。如果用户登录到Facebook,我不知道你没有立即看到auth页面。对不起,我忍不住了。 – Gats 2011-05-29 21:30:41

0

我只是想回答我的问题。解决方案其实很简单。而不是在我的控制器中重定向到授权uri,我需要按照我的观点执行如下操作。这避免了中间登录页面,似乎别人都在做谁击中了这个特殊问题(其中中间的Facebook页面会直接投放经过用户授权页面代替。)

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

我可以我不明白为什么它很重要,我不能在控制器中重定向。所以如果有人使用RoR可以解释为什么,让我知道。

0

我最近遇到了类似的问题。为了打破你的应用程序在iframe的和从服务器端重定向到授权页面重定向轨道,你可以做即:

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 

这是非常之多,在Facebook的文档使用PHP描述的相同方式。

此外,如果用户授权您的应用程序,您将在signed_request响应参数中获得oauth_access标记。我不使用考拉,所以不知道他们如何解析签名的请求。

从测试中我发现只要用户已经授权你的应用程序,你就会从每一个请求的facebook上得到oauth_access标记。这使得检测用户是否授权应用程序变得很容易,并且避免每次他/她访问您的应用程序时向用户发送授权页面。

相关问题