我使用名为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提供的开箱即用功能?
所以我的问题如下:
最后,我要指出,这是不是重复的问题。我在这里看到了类似的问题,询问如何实现这个with和without STI,但是这些问题的答案通常建议使用STI架构或者只是指向我正在寻求的wiki文章帮助,但似乎没有提供关于如何使用多个模型实现Omniauth的真正可重复的解决方案或建议。我的问题更加具体,是维基文章关于如何为omniauthable模块手动构建路由的解释不足的结果。