【问题标题】:Rails 4 Devise Omniauth with multiple providers tied to model associated with userRails 4 设计 Omniauth,多个提供者绑定到与用户关联的模型
【发布时间】:2015-12-22 12:52:46
【问题描述】:

我有一个关于如何进行集成设计的问题。我有两个模型CompanyUser。就我而言,用户将注册我的应用程序,然后可以选择将应用程序连接到他们的不同帐户(Twitter、Facebook 和 LinkedIn),以便他们可以查看/创建帖子/推文/等。因为 Company has_many Users 和社交媒体帐户属于公司,我想使用另一个名为 Provider 的模型将凭据绑定到 Company 模型来存储凭据,因此允许任何拥有访问公司社交媒体帐户的权限。

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

如何使Companyomniauthable 而不是用户?如果我不打算允许用户身份验证/注册视图omniauth,我什至需要让我的模型omniauthable?

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

【问题讨论】:

    标签: ruby-on-rails devise omniauth


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      经过深思熟虑,我想出了一个效果很好并且比我最初尝试的方法简单得多的方法。这似乎是一个黑客,所以我当然愿意看看是否有人有更清洁的方法。

      我做的第一件事就是放弃让公司模型变得可全能,因为我不希望用户以公司身份登录,而是以公司用户身份登录。相反,我将用户模型设为omniauthable,然后创建了Identity 模型,其中belongs_to 用户和公司。 UserCompany 都是 has_one Identity。一旦用户授权提供者,就会创建一个新的身份。

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

      【讨论】:

        猜你喜欢
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-10
        • 2016-12-30
        • 1970-01-01
        • 2013-09-30
        相关资源
        最近更新 更多