2

Devise (2.2.3) と Active Admin (0.5.1) を使用したアプリケーションがあります。最初に Devise をインストールし、次に Active Admin をインストールしました。アプリ全体がログインの背後にある必要があるため、アプリケーション コントローラーには次のものがあります。

before_filter :authenticate_user!

しかし、Active Admin をルート名前空間 ( config.default_namespace = falseinitializers/active_admin.rb 内) にインストールしてから、私のアプリケーションでは誰もログインできなくなりました。パス /users/login へのリダイレクト ループを作成します。

config/application.rb ファイルに skip_before_filter を追加してこれを軽減しようとしましたが、うまくいきませんでした

config.to_prepare do
  Devise::SessionsController.skip_before_filter :authenticate_user!
  UsersController.skip_before_filter :authenticate_user!
end

また、以下を app/admin/user.rb に追加しました

controller do
  skip_before_filter :authenticate_user!
end

これも何もしませんでした。最後に、application_controller.rb で 2 つのコントローラーを明示的に除外しようとしましたが、これも何もしませんでした。

before_filter :authenticate_user!, except: {controller: [:users, 'devise/sessions']}

このやや厄介な問題を回避するにはどうすればよいですか?

4

1 に答える 1

5

ルートを変更することで問題を解決しました。次のように、ActiveAdmin ルートは Devise ルートの後に来る必要があります。

devise_for :users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)

これは、Devise をインストールして構成した後に ActiveAdmin をインストールしたために発生したと考えられます。

于 2013-04-15T19:35:31.690 に答える