Аутентификация Ruby On Rails с помощью Devise и (надзирателей) обратных вызовов

У меня есть приложение 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 в Rails

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

2 ответа

Решение

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

  # Configure the default scope given to Warden. By default it's the first
  # devise role declared in your routes (usually :user).
  # config.default_scope = :user

Поскольку маршруты активных администраторов были добавлены выше маршрутов разработки для моего пользователя, администратор стал пользователем по умолчанию.

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
Другие вопросы по тегам