Аутентификация Ruby On Rails с помощью Devise и (warden) обратных вызовов - PullRequest
3 голосов
/ 23 ноября 2011

У меня есть приложение rails, которое использует Devise, с моделью User, без области.Я также добавил в приложение гем activeadmin, Active Admin - это гем, используемый для добавления панели администратора в ваше приложение.Он использует Devise для входа в систему пользователей и создает отдельную модель admin_user для администраторов.

Я разрешаю анонимным, не авторизованным пользователям создавать корзины покупок, создавая session[:cart_id].Если пользователь входит в систему, я хочу связать пользователя с корзиной, что-то вроде

Cart.find(session[:cart_id]).user = current_user 

Я планировал использовать обратные вызовы Wardens обратные вызовы wardens , чтобы это реализовать, что-то вроде этого:

Warden::Manager.after_set_user :scope => :user do |user, auth, opts|

    Cart.find(session[:cart_id]).user = user 

end

Однако я получаю сообщение об ошибке:

<% unless user_signed_in? %> выдает ошибку :admin_user user is not logged in

У кого-нибудь есть идеи, что происходит?

Я посмотрел на связанные вопросы, но без помощи:

Как получить доступ к сеансу из Warden / Devise after_authentication callback в Rails

Где следуетобратные вызовы хранителей помещаются в приложение rails?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Модель AdminUser, которую использует Active Admin, также выполняет этот обратный вызов. Так что, может быть, если может решить вашу проблему:

 Warden::Manager.after_set_user :scope => :user do |user, auth, opts|
   Cart.find(session[:cart_id]).user = user if user.class == User
 end
1 голос
/ 14 февраля 2012

На самом деле оказалось, что проблема была решена путем установки области по умолчанию в warden, в файле инициализатора devise.adminuser стал пользователем по умолчанию.

...