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

时间:2014-03-04 22:47:48

标签: ruby-on-rails facebook twitter ruby-on-rails-4 omniauth

我正在使用omniauth-facebookomniauth-twitter宝石来启用通过Facebook,Twitter登录。

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

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

1 个答案:

答案 0 :(得分:3)

在我看来,问题是我们不知道用户的意图。如果用户从您的应用程序注销并且他们没有其他标签打开Facebook,然后他们离开计算机,认为他们已经完成但是让浏览器打开,那么是的,这将是糟糕的。另一方面,如果他们在Facebook上有另一个标签,如果他们退出你的应用程序,然后切换到期望继续使用Facebook的其他标签,他们将会生气。你可以说,讨厌的人比让他们不知不觉地登录Facebook更好 - 我一般都同意!

如果您正在处理登录流服务器端,我不知道这样做的好/官方方式。有人建议建立一个正常的Facebook网址 - 请参阅https://stackoverflow.com/a/8765863 - 我想你可以重定向到那个并重新定向,如果这种方法仍然有效(这是一个旧答案),但它会像用户所暗示的那样感到脆弱。 / p>

如果你使用的是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注销?”的页面。按钮 - 可能使用带有auto_logout_link参数的javascript登录按钮。然后他们可以从Facebook注销,如果他们已经完成了计算机,或者选择不点击它,如果他们在另一个选项卡中打开Facebook并想继续使用它。

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

我不确定是否可以使用omniauth-twitter进行同等操作 - 我没有相关经验。