使用OAuth服务器端时如何从Facebook注销?

时间:2015-12-17 10:10:19

标签: asp.net-mvc facebook facebook-graph-api oauth owin

我正在使用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调用?

还有另一种方法可以实现注销吗?服务器端解决方案将是完美的!虽然我不想使用任何未记录/未经批准的东西。

0 个答案:

没有答案