我正在使用OWIN和ASP.Net Identity来让用户使用他们的社交媒体凭据登录网站。
作为其中的一部分,我们还要求额外的权限以便与其帐户进行互动。
除了在使用Facebook登录时尝试从网站注销外,这在Twitter和Facebook上工作正常。
如果您退出ASP.Net应用程序,您仍然登录到Facebook。这本身并不是问题,但当您返回ASP.Net应用程序时,您将使用之前使用的Facebook帐户自动登录,并且您没有机会选择其他帐户。
作为用户,您可以导航到Facebook,注销,然后返回到ASP.Net应用程序,您将被要求再次登录,但这对用户来说不是一个非常好的过程。简单地向用户解释这将是混乱的,并且他们有很多错误(在不同的浏览器中注销,而不是阅读帮助文本等)。
关于这个问题的答案建议使用javascript SDK,它实现起来不太糟糕:Logging out from facebook when using MVC 5 OWIN
有些答案说“它应该如何工作”,但我们希望我们的用户在这个应用程序中使用多个帐户,因此需要合理的注销过程。 Facebook自己也说我们应该在退出我们的应用程序时将人们从Facebook注销:https://developers.facebook.com/docs/facebook-login/web#logout
注意:此功能调用还会将此人记录在Facebook外。原因是有人可能在登录流程期间登录了您的应用程序并进入Facebook。如果是这种情况,他们可能不会期望在他们退出您的应用时仍然登录到Facebook。为了避免让人感到困惑并保护个人安全,我们强制执行此注销行为。
但这让我想到了我遇到的当前问题。
我有以下要执行注销的Typescript / Javascript代码:
FB.getLoginStatus((getLoginStatusResponse) => {
if (getLoginStatusResponse.status === 'connected') {
FB.logout((logoutResponse) => {
$("form[id='logoutForm']").submit();
});
} else {
$("form[id='logoutForm']").submit();
}
});
getLoginStatus
返回正常,表示用户已登录(status === 'connected') === true
。
但是,当我进行logout
调用时,我可以看到API返回302 Not Found
,重定向指向facebook主页。
Facebook Javascript SDK通过吞下错误而不是调用logout
回调来解决此问题。
为什么在我确认用户已登录后,我获得302 for官方API调用?
还有另一种方法可以实现注销吗?服务器端解决方案将是完美的!虽然我不想使用任何未记录/未经批准的东西。