Omniauth Strategies - 在共享系统上管理多个用户

时间:2014-01-15 12:54:54

标签: omniauth

我知道答案会是什么,但我只是想试试运气。以Facebook为例说,我使用omniauth-facebook来允许用户登录我的网站。登录后,用户可以在此站点上设置一些隐私数据。

采用一种方案,我有2位用户U1U2。他们都在我的网站上使用Facebook单独登录,并分别授权该应用。现在考虑一个共享系统,U1来到我的网站,点击Login using Facebook,验证自己,一切都没问题。 U1离开,但未从Facebook注销。现在U2来了,点击Login using Facebook并使用U1的凭据自动登录。我不会在任何时候存储用户的access_token

有什么方法可以阻止这种情况发生吗?我能想到的最好的是添加一个中间页面,介于FB和我站点的回调之间,并询问用户这是否是来自FB的目标用户。如果是这样,继续,否则带她登录页面。但这并不涉及U2仍可以看到U1页面的事实。

非常感谢任何输入。

修改:我定位的是FacebookTwitterLinkedInGoogle。所以我正在寻找一个共同的解决方案。我知道有可能对FacebookTwitter进行强制身份验证,但我想实现一个通用解决方案。

1 个答案:

答案 0 :(得分:1)

Facebook(和omniauth-facebook)提供选项auth_type以防止这种情况:

use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
    :auth_type => 'reauthenticate'
end

使用此选项,当用户尝试使用Facebook登录您的服务时,系统会要求用户输入密码。有关详细信息,请查看gem's documentation

最后一点说明:此选项仅适用于omniauth-facebook。其他OmniAuth提供商可能有类似的选项,但其他人可能根本没有。例如,Twitter有一个force_login选项,当设置为true时,将从Twitter注销用户。有时候这就是你想要的,有时却不是。从其他服务注销用户可能非常麻烦。我真的很喜欢,如果所有提供商都有这两个选项,那么我们可以选择使用哪一个(从外部服务注销用户或只是再次询问密码)但我想我们必须满足于我们的有。例如,据我所知,谷歌没有保护这种风险。