Аутентификация активного администратора конфликтует с аутентификацией пользователя - PullRequest
11 голосов
/ 04 октября 2011

Active Admin - это драгоценный камень, используемый для того, чтобы в вашем приложении была панель администратора.Он использует Devise для входа в систему пользователей и создает отдельную модель admin_user для администраторов.Мое приложение уже использует devise и использует своих пользователей в качестве модели user.С тех пор, как я начал использовать драгоценный камень активного администратора, в моем файле маршрутов следующая строка продолжает преобразовываться в home # index, а не users # dashboard, даже когда мой пользователь вошел в систему. Раньше это работало нормально, когда зарегистрированные пользователи передавались пользователям.#dashboard в качестве корневого URL.

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

Происходит то, что .authenticate? проверяет, вошел ли в систему admin_user (принадлежащий Active Admin) или нет, но не мою модель user, которую я должен проверитьдля, поэтому, когда я вошел в систему с активным интерфейсом администратора, мой корень сайта становится вместо пользователя # dashboard, не проверяя, вошел ли в систему user или нет.Как я могу сделать .authenticate? проверку на вход в систему user, а не admin_user?

Любая помощь или подсказки будут очень признательны

Ответы [ 4 ]

20 голосов
/ 04 октября 2011

Я смог решить это.Эта проблема была связана с тем, что Devise ожидает однопользовательскую модель в приложении.Вот как это исправить.

В файле config/initializers/devise.rb добавьте:

config.scoped_views = true

и

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

Вот это, смотритель:вход в систему, а не: admin_user

1 голос
/ 03 октября 2011

Я не уверен, но вы можете попробовать что-то вроде

root :to => proc { |env| [ 302, {'Location'=> env["warden"].authenticate? ? "users/dashboard" : "/home" }, [] ] }
1 голос
/ 03 октября 2011

Почему вы используете get "/"? Вы должны удалить это. Я использую определение, очень похожее на ваше, и отлично работает со мной. Используйте только:

root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'home#index'
0 голосов
/ 05 октября 2012

Что сработало для меня:

constraint = lambda { |request| request.env["warden"].authenticate? and request.env['warden'].user.instance_of?(AdminUser) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...