FacebookWebContext.Current.IsAuthorized работает на одной странице, но не на другой - PullRequest
1 голос
/ 16 марта 2012

У меня возникли проблемы с тем, чтобы мое приложение C # Facebook для холста определяло, авторизовал ли пользователь мое приложение.

Проблема на самом деле возникает только на дополнительной странице.Мое приложение первоначально проверяет на целевой странице и правильно определяет, что пользователь подтвердил приложение.

Краткий обзор приложения:

  1. Пользователь любит приложение.
  2. Пользователь авторизует приложение.
  3. Пользователь отправляет информацию другу (через уведомление Facebook)
  4. Друг пользователя заходит в приложение и получает информацию.

Итак, шаги 1-3 работают.На шаге 4 у меня возникают некоторые проблемы.

Я вызываю метод с именем "HasAuthorizedApplication", чтобы убедиться, что пользователь авторизовал приложение перед попыткой получить данные из API.

public bool HasAuthorizedApplication()
    {
        bool returnValue = false;

        try
        {
            if (FacebookWebContext.Current != null)
            {
                returnValue = FacebookWebContext.Current.IsAuthorized(Scope.Split(','));

                if (returnValue)
                {
                    AccessToken = FacebookWebContext.Current.AccessToken;
                    HttpContext.Current.Session["accesstoken"] = AccessToken;
                }
                else
                {
                    HttpContext.Current.Session["accesstoken"] = null;
                }
            }
        }
        catch
        {
            returnValue = false;
        }

        return returnValue;
    }

«Область» - это просто разрешения, которые я запрашиваю: «publish_stream, email»

Итак, на шаге 4 «друг пользователя» нажимает на уведомление Facebook и попадает на целевую страницу.приложения.Он проверяет авторизацию, и если друг не авторизовался, отображается диалог авторизации.

После авторизации приложение перенаправляет на дополнительную страницу, и перед тем, как я получу детали уведомления из графика, я проверяю еще раз, чтобы убедиться, что друг все еще авторизовал приложение.

К сожалению,когда я называю это на этот раз, «FacebookWebContext.Current.IsAuthorized» всегда возвращает «ложь».Я отмечаю, что «AccessToken» и «SignedRequest» в настоящее время не имеют значения.Я пытаюсь перенаправить обратно в диалог авторизации, но, поскольку друг уже подтвердил, он не отображается для пользователя.Но каждый раз, когда они возвращаются на мою дополнительную страницу, вызов IsAuthorized возвращает false.(и если я пытаюсь просто получить данные, дополнительно возвращает false)

Мой вызов для получения данных, связанных с уведомлением Facebook:

public dynamic GetData(string dataId)
    {
        if (HasAuthorizedApplication())
        {
            var fb = new FacebookWebClient(AccessToken);
            dynamic data = fb.Get(dataId);

            return data;
        }

        return null;
    }

Где «dataId» - это идентификаторУведомление.

По общему признанию, я не знаю много о том, как работает взаимодействие между Javascript и backend.У меня дополнительно есть следующий Javascript как на целевой, так и на вспомогательной страницах:

<script type="text/javascript">
            FB.init({
                appId: '<%=APPID %>',
                status: true, // check login status
                cookie: true, // enable cookies to allow the server to access the session
                oauth: true,
                xfbml: true // parse XFBML
            });

        </script>

И идеи, почему он будет работать правильно на одной странице, а не на другой?

Спасибо!Craig

1 Ответ

0 голосов
/ 19 марта 2012

Я знаю, что это не совсем тот ответ, который вы ищете, но FacebookWebContext является частью Facebook C # SDK V5 и устарел. С этим связано несколько проблем, главное, что это зависит от готовых файлов cookie авторизации Facebook. Facebook недавно изменил свою политику, указав, что разработчики больше не должны напрямую читать куки-файлы Facebook, поскольку они могут измениться в любое время. Таким образом, мы удалили эти функции в V6 SDK Facebook C #.

При этом вам следует обрабатывать почти все, что вы пытаетесь сделать выше, с помощью Javascript SDK Facebook на клиенте, а не с C # SDK на сервере. Для окончательной проверки вы можете использовать Facebook C # SDK на сервере.

Поэтому я бы порекомендовал вам обновить V6 до SDK Facebook C #, который не использует файлы cookie Facebook или содержит объект FacebookWebContext.

Полную документацию по Facebook C # SDK можно найти по адресу http://csharpsdk.org.

...