在没有STI的多个用户模型上设计Omniauth

时间:2016-03-09 15:12:05

标签: ruby-on-rails devise omniauth

我使用名为Employer的单个用户模型构建了一个Rails 4.2.5 / Devise 3.5.2应用程序。我目前使用Devise omniauthable模块进行了多次社交集成。我现在想要将这些社交集成扩展到名为Contact的第二个用户模型,但是我无法使用标准过程执行此操作,因为Devise的omniauthable模块不能与多个用户模型一起使用。

以下是我的两个用户模型:

class Employer < ActiveRecord::Base
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable,
    :omniauthable, :confirmable
end

class Contact < ActiveRecord::Base
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable,
    :omniauthable, :confirmable
end

我阅读了有关如何为多个模型配置Omniauth的wiki article。我准确地按照说明进行操作,但由于路由信息非常模糊,我仍然无法使用它。具体来说,我无法手动构建它们时的正确路线。请注意,在上面的用户模型中,我在wiki文章中尝试解决方法时删除了omnuauthable模块。

我能够根据我在wiki文章中读到的内容构建以下路由:

match "/user/:key/auth/:provider", to: "omniauth_callbacks#passthru", constraints: { action: /twitter|facebook|linkedin/ }, via: [:get, :post]
match "/user/:key/auth/:action/callback", to: "omniauth_callbacks#twitter", constraints: { action: /twitter|facebook|linkedin/ }, via: [:get, :post]
match "/user/:key/auth/:action/callback", to: "omniauth_callbacks#facebook", constraints: { action: /twitter|facebook|linkedin/ }, via: [:get, :post]
match "/user/:key/auth/:action/callback", to: "omniauth_callbacks#linkedin", constraints: { action: /twitter|facebook|linkedin/ }, via: [:get, :post]

问题是我不知道如何构建我的omniauth授权路径。当用户在我的页面上并单击身份验证按钮时,我将它们发送到哪个控制器操作,以及如何手动构建Devise提供的开箱即用功能?

所以我的问题如下:

  1. 使用具有多个用户模型的Devise的omniauthable模块是否有更简单的开箱即用解决方案。具体来说,我正在寻找一种不依赖于STI的解决方案,这对我来说实施起来并不实用。
  2. 如果没有开箱即用的解决方案,我如何从维基文章中实现该方法?显然,这篇文章缺乏一些必要的信息,我需要这些信息才能使其解决方案起作用。
  3. 最后,我要指出,这是不是重复的问题。我在这里看到了类似的问题,询问如何实现这个withwithout STI,但是这些问题的答案通常建议使用STI架构或者只是指向我正在寻求的wiki文章帮助,但似乎没有提供关于如何使用多个模型实现Omniauth的真正可重复的解决方案或建议。我的问题更加具体,是维基文章关于如何为omniauthable模块手动构建路由的解释不足的结果。

0 个答案:

没有答案