Facebook C#SDK授权问题

时间:2010-11-24 00:22:54

标签: c# facebook facebook-c#-sdk

我有一个iFrame Facebook应用程序。我正在使用Facebook C#SDK,FacebookFacebook.Web库。

当用户第一次访问我的应用程序时,我在FacebookApp上创建了一个page_load()对象。如果app.Session为空,则创建CavasAuthorizer(app),然后调用Authorize()

两个问题:

首先,通过调用Authorize生成的重定向URL会导致Facebook出错并显示错误的“下一个”参数。称“next”参数不归应用程序所有。它看起来像这样:

next=http://localhost:4002/facebookredirect.axd/mygame_dev/mygame.aspx

我可以编辑CanvasURLBuilder中的代码,使下一个看起来像这样:

next=http://localhost:4002/mygame.aspx

此时,如果我剪切并粘贴到浏览器中,则URL会起作用,但是它会让我遇到第二个问题。

当代码运行时,会向用户显示一个大部分为空的页面,其中包含中型Facebook图像和“go to Facebook”链接。当用户点击链接时,它会将用户带到我的应用程序的正确授权页面。

我感觉这是两个可能相关的问题,但可能是分开的。

非常感谢任何帮助。

-Andy

3 个答案:

答案 0 :(得分:2)

第一个问题

确保应用配置页面中的网站网址设置为http://apps.facebook.com/ [your_app] /

alt text

对于第二个问题。

当您未获得授权时,您将被重定向到登录网址,但您无法从iframe执行此操作,因为它将重定向iframe,您将在Facebook内部获得Facebook。 您应该使用window.top.location = ...重定向父窗口。

修改

Facebook C#SDK在使用SDK的Mvc部分时,已经为您做到了这一点。由于您使用的是webforms,因此您应该使用与此等效的代码。

protected void Page_Load(object sender, EventArgs e)
{
    var fb = new FacebookApp();
    var auth = new CanvasAuthorizer(fb);

    if (!auth.IsAuthorized())
    {
        var url = auth.GetLoginUrl(new HttpRequestWrapper(Request));

        var content = CanvasUrlBuilder.GetCanvasRedirectHtml(url);
        Response.ContentType = "text/html";
        Response.Write(content);
        Response.End();
        return;
    }

    //...Go on if authorized
}

答案 1 :(得分:0)

要在本地测试,请确保您在Facebook中的网站网址和Canvas网址类似于http://localhost:8181/yourpage。然后确保在VS中设置项目属性\ Web下的设置,以便不动态生成端口,您可以使用8181(或任何您喜欢的端口,只要它与FB中的相同)。

答案 2 :(得分:-1)

我认为您的网络配置中的回拨网址指向localhost。你不能这样做,因为代码实际上是在Facebooks IFrame内运行的。 Localhost是facebook web服务器的localhost。您必须在web.config中的Callback键中提供有效的URL。如果您没有域名,可以映射到您的IP,然后查看任何免费的动态DNS客户端。 No-ip是一个例子(我亲自使用的一个)。