11

Active Adminは、アプリケーションで管理ダッシュボードを作成するために使用される gem です。ユーザーのログインに Devise を使用admin_userし、管理者用に別のモデルを作成します。私のアプリケーションはすでにdeviseを使用しており、そのユーザーをuserモデルとして持っています。アクティブな admin gem を使い始めて以来、routes ファイルの次の行は、ユーザーがログインしている場合でも、users#dashboard ではなく、home#index に解決され続けます。 #dashboard をルート URL として使用します。

root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'

何が起こっているかというと.authenticate?admin_user(Active Admin に属する) がログインしてuserいるかどうかをチェックしていますが、チェックする必要があるモデルはチェックしていないため、アクティブな管理インターフェイスにログインすると、サイトのルートがユーザーになります。userがログインしているかどうかを確認せずに、代わりに #dashboard を使用します。ログインしているかどうかを.authenticate?確認するにはどうすればよいですか?useradmin_user

どんな助けや手がかりも大歓迎です

4

4 に答える 4

20

これで解決できました。この問題は、アプリケーションで単一のユーザー モデルを想定している Devise に関連していました。これを修正する方法は次のとおりです。

config/initializers/devise.rbファイルに次を追加します。

config.scoped_views = true

config.default_scope = :user #or whichever is your regular default user model

それだけです。warden は、:admin_user ではなく、:user がログインしているかどうかをチェックします。

于 2011-10-04T07:26:06.143 に答える
1

なぜあなたはを使用していget "/"ますか?削除する必要があります。私はあなたの定義にかなり似た定義を使用しており、うまく機能します。使用するだけ:

root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'
于 2011-10-03T19:28:20.140 に答える
1

よくわかりませんが、次のようなものを試すことができます

root :to => proc { |env| [ 302, {'Location'=> env["warden"].authenticate? ? "users/dashboard" : "/home" }, [] ] }
于 2011-10-03T19:28:36.020 に答える
0

私のために働いたのは:

constraint = lambda { |request| request.env["warden"].authenticate? and request.env['warden'].user.instance_of?(AdminUser) }
于 2012-10-05T14:55:17.150 に答える