无法使用Facebook C#SDK注销Facebook

| 我想我已经阅读了有关在桌面应用程序内注销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中) 第一种是愚蠢的。为什么在使用C#时为什么要使用JavaScript?这有点倒退,并且在桌面应用程序中有很多额外的开销。 (我没有尝试过此操作,因为在桌面应用程序中执行此操作非常令人讨厌。)如果有人可以确认这是唯一可行的方法,请这样做。我正拼命地避免它。 第二个无效。也许它曾经在过去起作用,但是我为使它起作用而进行的无数尝试都以失败告终。 第三个不起作用。我已经尝试了十多个变体,但成功率为零。 那里的最后一个选项不适用于桌面应用程序,因为它不是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更新移动UI,这很容易中断。它也很杂乱,并且比尝试使用JavaScript SDK FB.logout()方法可能更糟(尽管不是很多)。 我已经搜索了某种文档,但是,在Facebook开发人员文档中找不到任何说明如何注销应用程序的内容。 有没有人解决了这个问题,或者没有看到可以移植到Facebook C#SDK的任何文档? 如果有人可以指向一些可以使用它的文档,我当然愿意使用WebClient或HttpClient / Response。我只是无法找到任何表明这种方法如何工作的低级文档。 在此先感谢您提供任何建议,指示或链接。     
已邀请:
        此问题已在此处回答,建议使用以下网址注销,因为facebook显然跳过了“ next”参数
https://www.facebook.com/logout.php?next=[redirect_uri]&access_token=[access_token]
    
        我猜想您要注销用户,以便可以登录另一个帐户。在这种情况下,我建议使用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时,都会将用户重定向到登录页面。     
        看到这篇博客文章 使用FacebookOAuthClient()获取注销URL,并向该URL发送一个http请求。     
好吧,我没有发现任何有效的方法,因此我采取了讨厌的方法。 FacebookOAuthClient.GetLogoutUrl()方法URL不会注销我,但是,它确实返回\“ m.facebook.com \” URL,例如: 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页,仍然有点混乱。但是,它起作用。     
        在缺少注销按钮时遇到了同样的问题,前几天通过Google找到了这个提示: 打开https://developers.facebook.com/?ref=pf(称为\“ facebook开发者网站\”),您可以在其中再次找到通常的登录/注销按钮。 不要问我它是如何工作的,为什么它会工作,我只是按照我发现自己的指示使用,它对我有用 祝你好运,祝你好运     

要回复问题请先登录注册