Проблема авторизации в Facebook C # SDK - PullRequest
3 голосов
/ 24 ноября 2010

У меня есть приложение iFrame для Facebook. Я использую библиотеки Facebook C # SDK, Facebook и Facebook.Web.

Когда пользователь впервые заходит в мое приложение, я создаю объект FacebookApp в page_load(). Если app.Session равно нулю, я создаю CavasAuthorizer(app), затем вызываю Authorize().

Две проблемы:

Во-первых, URL-адрес перенаправления, генерируемый путем вызова Authorize, вызывает ошибку Facebook с неверным параметром «next». Говорит, что следующий параметр не принадлежит приложению. Это выглядит так:

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

Я могу отредактировать код в CanvasURLBuilder, чтобы следующий вид выглядел следующим образом:

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

На этом этапе URL работает, если я вырезал и вставил в браузер, однако это приводит меня ко второй проблеме.

Когда код запускается, пользователю предоставляется в основном пустая страница с изображением Facebook среднего размера и ссылкой "перейти на Facebook". Когда пользователь нажимает на ссылку, он переходит на правильную страницу авторизации для моего приложения.

У меня такое чувство, что это две, возможно, связанные проблемы, но потенциально отдельные.

Любая помощь здесь будет принята с благодарностью.

-Анди

Ответы [ 3 ]

2 голосов
/ 24 ноября 2010

Для первой проблемы

Убедитесь, что URL-адрес сайта на странице конфигурации приложения установлен на http://apps.facebook.com/[your_app]/

alt text

Для второй проблемы.

Когда вы не авторизованы, вы будете перенаправлены на URL входа, но вы не сможете сделать это из своего iframe, так как он перенаправит iframe, и вы получите Facebook внутри Facebook. Вы должны использовать window.top.location = ... для перенаправления родительского окна.

EDIT

Facebook C # SDK Уже делает это для вас при использовании Mvc-части SDK. Поскольку вы используете веб-формы, вы должны использовать этот код, который является эквивалентом.

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 голосов
/ 30 ноября 2010

Для локального тестирования убедитесь, что ваш URL сайта и Canvas URL в Facebook похожи на http://localhost:8181/yourpage. Затем убедитесь, что в VS вы установили параметр в свойствах проекта \ Web, чтобы порты не генерировались динамически, и вы могли использовать 8181 (или любой другой порт, который вам нравится, если он такой же, как в FB).

0 голосов
/ 24 ноября 2010

Я думаю, что ваш URL обратного вызова в вашей веб-конфигурации указывает на localhost. Вы не можете сделать это, так как код на самом деле работает внутри IFrame Facebook. Localhost является локальным для веб-сервера facebook. Вам нужно будет указать действительный URL в ключе обратного вызова в вашем файле web.config. Если у вас нет домена, который вы можете сопоставить с вашим IP-адресом, то посмотрите любой из бесплатных динамических DNS-клиентов. No-ip - это один пример (и я использую его лично).

...