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_for3つの異なるモデルを呼び出しており、そのうちの1つがモジュールを使用しているため、Deviseは混乱し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
    

    Simple OmniAuthのRailscastは、これを設定するのに役立ちます。

于 2012-11-27T19:41:57.177 に答える