无法使用 Facebook C# SDK 注销 Facebook
Posted
技术标签:
【中文标题】无法使用 Facebook C# SDK 注销 Facebook【英文标题】:Cannot Logout of Facebook with Facebook C# SDK 【发布时间】:2011-09-17 15:55:45 【问题描述】:我想我已经阅读了有关在桌面应用程序中注销 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。我根本无法找到任何显示这种方法如何工作的低级文档。
提前感谢您提供任何建议、指示或链接。
【问题讨论】:
【参考方案1】:看到这个blog post
使用 FacebookOAuthClient() 获取注销 url 并向该 url 发送 http 请求..
【讨论】:
谢谢。我试试看! 抱歉——这不起作用。它做同样的事情,即注销尝试返回 Facebook 移动页面 (m.facebook.com) 并且用户仍处于登录状态。【参考方案2】:好吧,我没有发现任何有用的东西,所以我求助于一个讨厌的黑客。
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 页,而且还是有点乱。但是,它有效。
【讨论】:
【参考方案3】:这个问题已经回答here,建议使用下面的 url 注销,因为 facebook 显然跳过了“next”参数
https://www.facebook.com/logout.php?next=[redirect_uri]&access_token=[access_token]
【讨论】:
【参考方案4】:有同样的问题,缺少注销按钮,前几天通过谷歌找到了这个提示:
打开https://developers.facebook.com/?ref=pf(称为“facebook开发者网站”),您可以再次找到通常的登录/退出按钮。
不要问我它是如何工作的以及它为什么工作,我只是按照我发现自己的说明进行操作,它对我有用
祝你好运
【讨论】:
【参考方案5】:我猜您想注销用户,以便您可以登录另一个帐户。在这种情况下,我建议使用 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 时,用户都会被重定向到登录页面。
【讨论】:
以上是关于无法使用 Facebook C# SDK 注销 Facebook的主要内容,如果未能解决你的问题,请参考以下文章
Facebook-connect:无法使用PHP SDK + JS SDK注销
使用 facebook SDK for ios 6 实现 Facebook 注销