首页 文章

Facebook C#SDK授权问题

提问于
浏览
3

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

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

两个问题:

首先,通过调用 Authorize 生成的重定向URL会导致Facebook出错并出现错误的"next"参数 . 表示"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 回答

  • -1

    对于第一个问题

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

    alt text

    对于第二个问题 .

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

    EDIT

    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
    }
    
  • 0

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

  • 2

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

相关问题