首次在coldfusion中使用我的FB应用程序时,不需要的Facebook按钮

时间:2011-04-16 01:09:46

标签: coldfusion facebook facebook-graph-api

我正在玩facebook应用程序,使用coldfusion在iframe中创建它们。 以下是我的应用{0}}

的网址

不是直接进入权限页面,而是进入下图所示的页面。 View that I get when use the application first time

点击那个大'Facebook'按钮后,它会要求申请许可。一旦授予权限,它就会转到我托管应用程序的网站,而不是仅在Facebook上打开它。

以下是我的画布网址[http://apps.facebook.com/firstones/

的代码

index.cfm

<cfparam name="client_id" default="1234"> <!---same as app_id --->
<cfparam name="redirect_uri" default="http://www.dkyadav.com/firstOnes/auth/">
<cfparam name="redirect_uri_final" default="http://www.dkyadav.com/firstOnes/">
<cfparam name="scope" default="user_education_history,user_hometown,friends_education_history ">
<cfparam name="client_secret" default="56789"> <!---- App_secret key ---->


<cfif not isdefined('url.code')>
    <Cflocation url="https://www.facebook.com/dialog/oauth?client_id=#client_id#&redirect_uri=#redirect_uri#&scope=#scope#" >

<Cfelse>
    <Cfif isdefined('url.error')>
        <Cfoutput>
            #url.error#<br />
            Access denied.
        </Cfoutput>
    <cfelse>
        <cfoutput>#url.code#<br />
            <cfhttp url="https://graph.facebook.com/oauth/access_token" result="token">
                <cfhttpparam name="client_id" value="#client_id#" encoded="no" type="url">
                <cfhttpparam name="redirect_uri" value="#redirect_uri#" encoded="no" type="url">
                <cfhttpparam name="client_secret" value="#client_secret#" encoded="no" type="url">
                <cfhttpparam name="code" value="#url.code#" encoded="no" type="url">
            </cfhttp>
            <cflocation url="#redirect_uri_final#?#token.filecontent#" addtoken="no">
        </cfoutput>
    </Cfif>
</cfif>

http://www.dkyadav.com/firstOnes/auth/]中,我查找access_token并继续使用我的应用程序。

我只是在第一次运行时才做上述事情。一旦获得批准,它就会按预期正常工作。

您可以尝试自己运行此应用http://www.dkyadav.com/firstOnes/index.cfm 请帮助,让我知道我实际上缺少什么。谢谢!

2 个答案:

答案 0 :(得分:3)

我认为你遇到的问题是你在Facebook上的初始显示页面实际上是从iframe中爆发出来的。

您可以在fbLogin()函数的http://www.dkyadav.com/firstOnes/index.cfm上看到Javascript正在执行此操作:

top.location.href = "https://graph.facebook.com/oauth/authorize?...

top指的是窗口层次结构顶部的窗口,在您的情况下,它将表示实际的Facebook主页,其中包含iframe。

希望有所帮助!

答案 1 :(得分:0)

我想我不需要access_token,我只需要通过解码从提交client_id到'https://www.facebook.com/dialog/oauth....'

以下是我正在使用的代码:

<cfif isdefined('signed_request')>
    <cfoutput>
        <cfset b64 = signed_request>
        <!--- Split the param by the . --->
        <cfset raw_str = ListGetAt(b64, 2, ".")>
        <cfset res = Len(raw_str) % 4>
        <cfif res eq 2>
             <cfset raw_str &= "==">
        <cfelseif res eq 3>
             <cfset raw_str &= "=">
        </cfif>
        <!--- Base 64 Decode --->
        <cfset result = ToString(BinaryDecode(raw_str, "Base64"))>
        <!--- String to JSON --->
        <cfset json = DeserializeJSON(result)>

        <cfif StructKeyExists(json,'oauth_token')>

        <Cfset at = json.oauth_token>

            <cfhttp url="https://graph.facebook.com/me/friends?access_token=#at#" result="newsFeed" />

            <cfif IsJSON(newsFeed.filecontent)>
                <cfset cfData=DeserializeJSON(newsFeed.filecontent)>
                <cfdump var = #cfData#>
            <cfelse>
                filecontent not in json format   
            </cfif>
        <cfelse>
            <script>
                top.location.href='https://www.facebook.com/dialog/oauth?client_id=12345XXX&redirect_uri=http://apps.facebook.com/test_app/&scope=read_stream,email'
            </script>
        </cfif>

    </cfoutput>
</cfif>