我正在使用此功能在Facebook上注销;
WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, new Uri(logOutUrl));
我还没有退出。经过测试的logoutUrls;
我的错误是什么?我必须在developer.facebook.com中设置任何设置吗?
答案 0 :(得分:1)
根据您提供的有限信息,很少有事情: 尝试使用Web身份验证代理完成干净注销时,您的第二个已尝试的URL更接近标记,但它有一些问题:
开头是正确的:" https://www.facebook.com/logout.php?"
注销重定向url在查询字符串上传递为参数[next] 其中包含:" login_success.html" 需要进行网址编码。 (另一方面,你被重定向到主页,这是你的发现)
访问令牌我认为这是正确的。
当你打电话给它时,你最终会在空白页面上显示成功字样,以及来自Facebook的快乐警告信息,你应该小心地在查询字符串上传递访问令牌。
但这并不是问题,因为最终用户无法访问该数据。使用Web身份验证代理时。
在修复url编码之后,您将遇到的下一个问题是用户被留在这个丑陋的页面,带有Facebook安全警告消息,用户必须单击其设备上的后退导航按钮才能返回应用程序,这不是理想的,Facebook警告页面也不会告诉最终用户这样做。
因此,要对抗此行为,请将Web身份验证代理作为触发注销请求和检测回调状态的不同方法。
所以最好向您展示一些代码:)
_logoutUrl = FBClient.GetLogoutUrl(new
{
next = "https://www.facebook.com/connect/login_success.html",
access_token = //your access token (string)
});
var url = new Uri("https://www.facebook.com/connect");
WebAuthenticationBroker.AuthenticateAndContinue(_logoutUrl, url);
你会看到我使用了WebAuthenticationBroker.AuthenticateAndContinue而不是AuthenticateAsync这是因为通过authenticate和continue,这允许我们提供方法,以及在引擎盖下使用的第二个uri / url,如果验证过程产生,在(以/包含)开头的网址中,我们提供的第二个网址,那么这就是指示器,自动将响应拉回我们的应用程序。
因此,对于上面的代码,wab(Web身份验证代理的简称)将启动它的内部Web视图控件并导航到Facebook注销URL,如您所知,并且当注销完成时将webview重定向到url:contains" login_success.html",发生的第二个(wab)将检测到我们提供的第二个参数https://www.facebook.com/connect的url是其中的一部分并返回应用程序。 Facebook身份验证令牌/ cookie将被清除。