如何通过 gem OmniAuth Facebook/Twitter 注销社交网站

Kir*_*rat 5 twitter facebook ruby-on-rails omniauth ruby-on-rails-4

我正在使用omniauth-facebookgemsomniauth-twitter来启用通过 Facebook、Twitter 登录。

一切正常,我可以使用OAuth. 这里的大问题是,当用户从我的应用程序注销时,它不会从他们进行身份验证的社交网站注销,这是危险的。

我想添加一个功能,该功能将破坏两个地方的会话,即我的应用程序和相应的社交网站。我怎么做?可以使用omniauth gems我目前正在使用的吗?或者是否有替代 gem/API 可以实现此目的?

Tim*_*Tim 4

在我看来,问题在于我们不知道用户的意图。如果用户从您的应用程序中注销,并且没有通过 Facebook 打开其他选项卡,然后他们离开计算机,认为一切都已完成,但仍保持浏览器打开,那么是的,这会很糟糕。另一方面,如果他们在 Facebook 上有另一个选项卡,如果他们注销您的应用程序,然后切换到另一个选项卡并希望继续使用 Facebook,他们会很恼火。你可能会说,惹恼别人比让他们不知不觉地登录 Facebook 更好——我基本上同意!

如果您在服务器端处理登录流程,我不知道有什么好的/官方方法可以做到这一点。有些人建议建立一个正常的 Facebook 网址 - 请参阅/sf/answers/613610441/ - 我想你可以重定向到该网址,并使其重定向回来,如果该方法仍然有效(这是一个旧的答案),但感觉很脆弱正如用户暗示的那样。

如果您使用 javascript api,则有以下FB.logout函数:

https://developers.facebook.com/docs/reference/javascript/FB.logout/

和/或使用以下参数自动显示注销按钮而不是登录按钮auto_logout_link

https://developers.facebook.com/docs/plugins/login-button/

涵盖两种用户意图场景的一个选项是使用正常的注销按钮,这显然会终止应用程序的会话,并且当他们单击它时,重定向到具有“从 Facebook 注销?”的页面。按钮 - 也许使用带有参数的 javascript 登录按钮auto_logout_link。然后,如果他们用完计算机,可以从 Facebook 注销,或者如果他们在另一个选项卡中打开 Facebook 并希望继续使用它,则可以选择不单击它。

我相信您知道,omniauth-facebook 支持服务器端和客户端登录流程。

我不确定omniauth-twitter 是否可以实现同等功能 - 我没有这方面的经验。