Не удается выйти из Facebook с помощью Facebook C# SDK

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

В частности, я хотел бы вывести пользователя из системы, чтобы он мог переключать личности, например. Люди, использующие общий компьютер дома, могут затем использовать программное обеспечение со своими учетными записями Facebook, но без возможности переключения учетных записей это довольно грязно. (Еще не проверял переключение учетных записей пользователей Windows, так как это слишком много, чтобы просить конечного пользователя, и в этом нет необходимости.)

Теперь я должен сказать, что я установил приложение для использования этих разрешений:

string[] permissions = new string[] { "user_photos", "publish_stream", "offline_access" };

Итак, «offline_access» включен туда. Я не знаю, должно ли это повлиять на выход из системы или нет.

Опять же, моя цель выхода из системы — просто переключить пользователей. (Если есть лучший подход, пожалуйста, дайте мне знать.)

Предполагаемые решения выглядят так:

  • Используйте SDK для JavaScript (FB.logout())
  • Вместо этого используйте «m.facebook.com».
  • Создайте свой собственный URL-адрес (и, возможно, используйте m.facebook.com)
  • Создайте свой собственный URL-адрес и используйте переменную сеанса (в ASP.NET)

Первый какой-то глупый. Зачем прибегать к JavaScript, если вы используете C#? Это своего рода шаг назад и имеет много дополнительных накладных расходов в настольном приложении. (Я не пробовал это делать, так как делать это в настольном приложении просто отвратительно грязно.) Если кто-то может подтвердить, что это единственный рабочий метод, пожалуйста, сделайте это. Я отчаянно пытаюсь этого избежать.

Второй не работает. Возможно, в прошлом это работало, но мои бесчисленные попытки заставить его работать потерпели неудачу.

Третий не работает. Я пробовал бесчисленное множество вариантов с нулевым успехом.

Последний вариант не работает для настольного приложения, потому что это не ASP.NET, и у вас нет переменной сеанса для работы.

Выход Facebook C# SDK также больше не работает. то есть

public FacebookLoginDialog(string appId, string[] extendedPermissions, bool logout)
{
    IDictionary<string, object> loginParameters = new Dictionary<string, object>
                              {
                              { "response_type", "token" },
                              { "display", "popup" }
                              };

    _navigateUri = FacebookOAuthClient.GetLoginUrl(appId, null, extendedPermissions, logout, loginParameters);

    InitializeComponent();
}

Помню, раньше работало, а сейчас не работает. (Что меня действительно озадачивает...)

Вместо этого теперь он направляет пользователя на мобильную страницу Facebook, где пользователь должен вручную выйти из системы.

Теперь я мог бы автоматизировать браузер, чтобы автоматически щелкнуть ссылку выхода для пользователя, однако это может сломаться, если Facebook обновит мобильный пользовательский интерфейс. Это также беспорядочно и, возможно, худшее решение, чем попытка использовать метод FB.logout() из JavaScript SDK (хотя и ненамного).

Я искал какую-то документацию, однако я не могу найти в документации для разработчиков Facebook ничего, что иллюстрировало бы, как выйти из приложения.

Кто-нибудь решил эту проблему или видел какую-либо документацию, которую можно портировать для работы с Facebook C# SDK?

Я, безусловно, открыт для использования WebClient или HttpClient/Response, если кто-нибудь может указать на какую-либо документацию, которая может с ним работать. Я просто не смог найти какой-либо низкоуровневой документации, показывающей, как этот подход может работать.

Заранее спасибо за любые советы, указатели или ссылки.


person Ryan Smyth    schedule 18.06.2011    source источник


Ответы (5)


На этот вопрос был дан ответ здесь, предлагается использовать приведенный ниже URL-адрес для выхода, поскольку facebook видимо пропуская "следующий" параметр

https://www.facebook.com/logout.php?next=[redirect_uri]&access_token=[access_token]
person bpaulon    schedule 15.08.2011

Я предполагаю, что вы хотите выйти из системы, чтобы вы могли войти в другую учетную запись. В этом случае я бы предложил этот подход с использованием WebAuthenticationBroker:

После некоторого времени экспериментов и безуспешных попыток ни с одним из приведенных выше примеров я понял, что отправка запроса на выход с URL-адресом перенаправления на ваш URL-адрес для входа работает отлично.

Вот код, который я использовал для объединения запросов:

var logIn = this.Client.GetLoginUrl(
              new
              {
                client_id = AppId,
                redirect_uri = App.FacebookAuthUri.AbsoluteUri,
                scope = AuthTokens.FACEBOOK_PERMISSIONS,
                display = "popup",
                response_type = "token"
              });


    var logOut = this.Client.GetLogoutUrl(new
    {
      next = logIn,
      access_token = Settings.FacebookToken.Value
    });

    if (Settings.FacebookToken.Value != null) WebAuthenticationBroker.AuthenticateAndContinue(logOut);

Теперь каждый раз, когда вы направляете пользователя к WebAuthenticationBroker, пользователь будет перенаправлен на страницу входа.

person James Mundy    schedule 23.02.2016

См. этот сообщение в блоге

Получите URL-адрес выхода с помощью FacebookOAuthClient() и отправьте http-запрос на URL-адрес.

person sandeep    schedule 18.06.2011
comment
Спасибо. Я попробую! - person Ryan Smyth; 20.06.2011
comment
Извините -- это не работает. Он делает то же самое, т.е. попытка выхода возвращает мобильную страницу Facebook (m.facebook.com), а пользователь все еще находится в системе. - person Ryan Smyth; 20.06.2011

Что ж, я не нашел ничего работающего, поэтому прибегнул к неприятному взлому.

URL-адрес метода FacebookOAuthClient.GetLogoutUrl() не выводит меня из системы, однако он возвращает URL-адрес «m.facebook.com», например:

http://m.facebook.com/logout.php?next=http://www.facebook.com/dialog/oauth/?response_type=token&display=popup&scope=user_about_me%252coffline_access&client_id=123456789012345&redirect_uri=http%253a%252f%252fwww.facebook.com%252fconnect%252flogin_success.html&confirm=1

На мобильной странице есть ссылка «Выход» внизу страницы.

Попытка поймать тег привязки:

HtmlElementCollection hec = wbrFacebookAuth.Document.GetElementsByTagName("a");
foreach (HtmlElement elem in hec)
{
    // the logout link has a data-sigil="logout" attribute:
    string datasigil = elem.GetAttribute("data-sigil").ToLower();
    if (datasigil == "logout")
    {
    wbrFacebookAuth.Navigate(elem.GetAttribute("href"));
    break;
    }
}

В Navigated WebBrowser событие непредсказуемо и ненадежно. Фактический метод ловли не имеет значения. например Это тоже не работает:

        string logoutPattern = @"<a href=""(/logout.[^""]+)""";

        Regex rx = new Regex(logoutPattern);
        if (rx.IsMatch(wbMain.DocumentText))
        {
            MatchCollection mc = rx.Matches(wbMain.DocumentText);
            if (mc.Count > 0)
            {
                foreach (Match m in mc)
                {
                    Console.WriteLine("*** " + m.ToString());
                }
            }
        }

Однако его можно надежно перехватить в обработчике событий DocumentCompleted.

private void wbrFacebookAuth_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
   if (_logout)
   {
    HtmlElementCollection hec = wbrFacebookAuth.Document.GetElementsByTagName("a");
    foreach (HtmlElement elem in hec)
    {
        // the logout link has a data-sigil="logout" attribute:
        string datasigil = elem.GetAttribute("data-sigil").ToLower();
        if (datasigil == "logout")
        {
        wbrFacebookAuth.Navigate(elem.GetAttribute("href"));
        break;
        }
    }
   }
}

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

person Ryan Smyth    schedule 21.06.2011

была такая же проблема с отсутствующей кнопкой выхода из системы, и на днях нашел через Google эту подсказку:

откройте https://developers.facebook.com/?ref=pf (так называемые "разработчики Facebook site"), и там вы снова можете найти обычную кнопку входа/выхода.

не спрашивайте меня, как это работает и почему это работает, я только следовал инструкциям, которые нашел сам, и у меня это работало

удачи, наилучшие пожелания

person not on fb very often    schedule 01.01.2013