4

我对 Devise 和 OmniAuth 如何工作有一些疑问,因为我找不到任何关于我要问的问题的说明。这里我以 Facebook 为例。

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

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

  3. 使用 OmniAuth 仅对我的应用程序意味着什么?和Devise基本一样吧?只是通过第三方?

现在,我只用omniauth-facebookgem 创建了一个应用程序,我认为它与 Devise 相同,但只是为我完成所有工作(姓名、电子邮件、位置等),就好像它只是一个替代品一样。

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

谢谢。

4

2 回答 2

3

嗯,Devise 是一个用户管理 gem,所以它会管理你所有的用户会话信息,密码,密码重置,确认......所有与注册和登录相关的事情都将由 devise 处理。

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

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

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

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

您可以将两者与相同的用户模型一起使用并管理您想要的方式。

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

我希望这足够清楚,如果您有任何问题,请告诉我!

于 2013-06-02T09:25:42.183 回答
3

https://github.com/plataformatec/devise/wiki/OmniAuth:-概述

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

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

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

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

于 2013-06-02T09:27:45.250 回答