2

我想通了,没有结果。我有一个名为 User 的模型和带有 STI 粉丝和艺术家的模型,如下所示:

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

和我的其他模特

Class Artist < User end
Class Fan < User end

我的路线

devise_for :users
devise_for :artists
devise_for :fans

我在尝试运行我的服务器或其他任何东西时遇到了这个错误

Wrong OmniAuth configuration. If you are getting this exception, it means that either:

1) You are manually setting OmniAuth.config.path_prefix and it doesn't match the Devise one
2) You are setting :omniauthable in more than one model
3) You changed your Devise routes/OmniAuth setting and haven't restarted your server

我的应用程序很先进,不想回去重构它,任何帮助将不胜感激

4

1 回答 1

5

答案可以在这里找到。

由于您需要devise_for三种不同的模型,而其中一种正在使用该omniauthable模块,因此设计变得混乱了。

任何一个:

  1. 删除devise_for:users.

  2. 或者omniauthable从用户模型中删除模块,创建自己的omniauth 路由并通过将omniauth 配置移动到新文件中来停止使用devise 的中间件。所以,而不是在devise.rb

    Devise.setup do |config|
      config.omniauth :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
    end
    

    你现在在你的新文件中有这个omniauth.rb

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']
    end
    

    简单 OmniAuth 上的 Railscast应该可以帮助您进行设置。

于 2012-11-27T19:41:57.177 回答