Rails 4 设计 Omniauth,其中多个提供商绑定到与用户关联的模型

Rails 4 Devise Omniauth with multiple providers tied to model associated with user

我对如何进行集成设计有疑问。我有两个模型 CompanyUser。在我的例子中,用户将注册我的应用程序,然后会看到将应用程序连接到他们不同帐户(Twitter、Facebook 和 LinkedIn)的选项,这样他们就可以 view/create posts/tweets/etc。因为 Company has_many Users 和社交媒体帐户属于公司,我想使用另一个名为 Provider 的模型将凭据绑定到 Company 模型存储凭据,因此允许任何有权访问公司社交媒体帐户的用户。

我一直在关注关于如何配置多个 omniauth 提供程序的各种教程,但他们都专注于将它们绑定到用户模型并告诉我将 devise :omniauthable 添加到我的用户模型。

如何让 Company 代替用户进行全能授权?如果我不允许用户 authentication/registration 查看 omniauth,我是否还需要让我的模型可 omniauth?

这是我第一次构建社交媒体集成,所以我希望我的问题是有道理的。谢谢!

我有类似的工作。我们有一个允许使用 omniauth 和设计以允许来自 FB、LI 和 Twitter 的 oauth 身份验证的应用程序。我将 Devise 和 Omniauth 与 User 模型联系在一起,并拥有一个具有提供者字段、uuid 和 user_id 关系的身份模型。通过这种方式,使用来自提供商或活动会话的电子邮件 returned,我可以确定用户是否已存在于系统中,并相应地 link 身份。使用 Twitter 有点棘手,因为他们没有 return 电子邮件,因此您必须添加以确定用户是否有经过验证的电子邮件,如果没有,您需要提示他们提供一个。您绝对可以通过使 Company 模型可全面授权和 devise_authentcatable 来做同样的事情,但这似乎有点违反直觉。我使用标准用户方法,让用户拥有一家或多家公司。希望这有帮助。

经过深思熟虑,我想出了一个非常有效的方法,并且比我最初尝试的方法简单得多。这看起来像是一个 hack,所以我当然愿意看看是否有人有更简洁的方法。

我做的第一件事是放弃使公司模型可全覆盖,因为我不希望用户以公司的身份登录,而是以公司的用户身份登录。相反,我将用户模型设置为 omniauthable,然后创建了一个 Identity 模型,该模型 belongs_to 用户和公司。 UserCompanyhas_one Identity。一旦用户授权提供商,就会创建一个新身份。

因为用户和公司都拥有身份,belong_to公司的其他用户可以通过公司访问该身份。同样,如果用户登录但没有任何身份,系统将在允许他们添加之前检查他们的公司是否有任何身份。这样一来,每个公司的每个提供商都只有一个身份,而创建它的用户并不重要。