Цикл перенаправления выхода из активного администратора - PullRequest
1 голос
/ 14 июня 2019

Я установил Active Admin, Devise и CanCan, а также настроил адаптер CanCan (согласно инструкциям в вики Active Active). У меня проблема в том, что когда пользователь выходит из системы, система не перенаправляет правильно на страницу входа. Кажется, он входит в бесконечный цикл перенаправления, т. Е. Safari говорит «слишком много перенаправлений» и «не удалось открыть страницу». Это происходит до тех пор, пока я не остановлю / не запустите сервер и не очистлю кеш / файлы cookie, чтобы уничтожить любые сеансы файлов cookie.

Моя система имеет два уровня администратора: «basic_admin» и «super_admin». Все действительные пользователи должны иметь доступ к бэкэнду Active Admin (нет фронтэнда - это система панели данных, управляемая данными).

routes.rb:

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

active_admin.rb:

  config.authentication_method = :authenticate_user!
  config.authorization_adapter = ActiveAdmin::CanCanAdapter
  config.on_unauthorized_access = :access_denied
  config.current_user_method = :current_user
  config.authorization_adapter = ActiveAdmin::CanCanAdapter
  config.on_unauthorized_access = :access_denied
  config.cancan_ability_class = 'Ability'
  config.logout_link_path = :destroy_user_session_path
  config.filter_attributes = [:encrypted_password, :password, :password_confirmation]
  config.localize_format = :long

ability.rb:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new

    # Standard permissions for all users (basic and super admins)
    can :read, ActiveAdmin::Page, :name => 'Dashboard'
    can :manage, ServiceUser
    can :manage, SupportSession, support_worker_id: user.support_worker_id
    can :create, SupportSession
    can :manage, User, id: user.id  # Can manage only their own account

    if user.role == 'super_admin'  # Extra permissions for super admins
      can :manage, :all
    end
  end
end

Console log (rails server terminal):

Started GET "/admin/login" for ::1 at 2019-06-14 08:43:23 +0100
Processing by ActiveAdmin::Devise::SessionsController#new as HTML
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)

1 Ответ

0 голосов
/ 14 июня 2019

Я думаю Я исправил это. Я подозреваю, что решение связано с моим контроллером приложений. Я закомментировал эти две строки, вставленные Devise (которые я установил до ActiveAdmin)

application_controller.rb:

#protect_from_forgery with: :exception, prepend: true
#before_action :authenticate_user!
...