Devise和OmniAuth如何协同工作?

时间:2013-06-02 03:45:09

标签: ruby-on-rails ruby-on-rails-3 devise omniauth

我对Devise和OmniAuth如何工作有一些疑问,因为我无法找到关于这些问题的任何澄清。在这里,我将以Facebook为例。

  1. 如果我希望用户只能使用Facebook登录而无法创建帐户,我还能使用Devise吗?它还有目的吗?

  2. 如果我要进入上面的Facebook路线,我会在我的数据库中看到它保存了一个“用户”,但该用户是否使用相同的ID,或者每次重新登录时都会删除/更改他们成为“新用户”?

  3. 使用OmniAuth对我的应用程序意味着什么?它与Devise基本相同吗?刚刚通过第三方?

  4. 现在,我创建了一个只有omniauth-facebook宝石的应用程序,我认为它与Devise相同,但只是为我做的所有工作(姓名,电子邮件,位置等)就好像它只是一个替代品。

    我提出这些问题的原因是因为我不想最终将用户分配给资源并且找不到他,因为它不断更改所述用户的ID,因为OmniAuth将其视为某种类型的会话table(登录)而不是实际用户的表(永久保存列)。我想要Devise功能,但只需用Facebook替换它。我希望我有意义。

    感谢。

2 个答案:

答案 0 :(得分:2)

嗯,Devise是一个用户管理宝石,因此它将管理您的所有用户会话信息,密码,密码重置,确认.... 与注册和登录相关的所有内容都将由设计处理。

现在,如果您想添加omniauth登录(Facebook,Twitter,....),您必须使用omniauth来处理使用Facebook等任何提供商的登录。

基本上Omniauth允许您将Facebook用户链接到您的应用用户,但与Devise完美配合。

例如,当使用Facebook注册创建用户时,它在用户表中创建,其中包含设计和omniauth信息。因此,您的用户也可以使用他的电子邮件登录并在之后创建密码。

Facebook为存储在您的数据库中的每个用户提供唯一的ID,因此当使用Facebook登录创建一个用户时,它既有用于Devise的电子邮件地址,也有用于Omniauth登录的Facebook ID。

您可以将两者结合使用相同的用户模型,并管理您的操作方式。

例如,您可以让用户在omniauth登录后创建密码,以便他们可以使用omniauth或devise登录。 或者您也可以让现有用户链接他们的Facebook帐户以供将来使用。

我希望这很清楚,如果你有任何问题,请告诉我!

答案 1 :(得分:2)

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

您的用户就是您的用户。 Omniauth为您的应用程序提供了一个接口,可以从您那里抽象出整个Oauth协议逻辑。但它是这样的:您的用户使用他的Facebook帐户登录并获得令牌。此令牌绑定到您应用中的用户,这就是omniauth识别他的方式。

不,Omniauth和设计不一样。两者都试图解决相同的目的(在您的应用程序上进行用户身份验证),但是在设计中捆绑了应用程序中的身份提供的整个内在逻辑(创建帐户,注册帐户,注册电子邮件,恢复帐户,管理会话,登录) ,退出...),Omniauth只提供一个界面,将您的用户帐户链接到授权的第三方帐户并访问其信息,其余的您必须自己做。

但是他们可以一起工作(使用设计创建您的应用本地帐户,使用omniauth将这些帐户链接到第三方帐户,并且(可能)根据他的第三方帐户填写用户帐户的一些基本信息,例如Facebook名称,电子邮件,照片)。

会话存储库独立于您的用户表,因此不可能发生您在上一段中所述的内容。