Не удается выйти из Facebook с помощью Facebook C # SDK - PullRequest
4 голосов
/ 18 июня 2011

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

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

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

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

Итак, "offline_access" включен там.Я не знаю, влияет ли это на выход из системы или нет.

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

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

  • Используйте JavaScript SDK (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 обновит мобильный интерфейс пользователя.Это также грязное и, возможно, худшее решение, чем пытаться использовать метод JavaScript SDK FB.logout () (хотя и ненамного).

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 15 августа 2011

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

https://www.facebook.com/logout.php?next=[redirect_uri]&access_token=[access_token]
1 голос
/ 24 февраля 2016

Я предполагаю, что вы хотите выйти из системы, чтобы вы могли войти в другую учетную запись. В этом случае я бы предложил этот подход, используя 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, пользователь перенаправляется на страницу входа.

0 голосов
/ 01 января 2013

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

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

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

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

0 голосов
/ 21 июня 2011

Ну, я не нашел ничего, что работает, поэтому я прибег к отвратительному хаку.

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

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, и это все еще немного грязно. Тем не менее, это работает.

0 голосов
/ 18 июня 2011

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

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

...