ActiveAdmin admin_users table разрабатывает проблему регистрации пользователей в таблице - PullRequest
0 голосов
/ 13 сентября 2018

Мои настройки

  • devise (4.4.3)
  • activeadmin (1.3.0)
  • Rails 5.2

Я создал пользовательскую таблицу с devise.установил активного администратора и использовал обычный метод и создал таблицу admin_users.Нет, я не использую тот же стол.ЭТО РАЗНЫЕ ТАБЛИЦЫ (я должен был сделать это, потому что в прошлый раз этот вопрос был помечен как дубликат, потому что пользователь думал, что я использовал ту же таблицу)

Файл маршрутов выглядит так:

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

devise_scope :user do
 authenticated :user do
  root 'home#dashboard', as: :authenticated_root
 end

 unauthenticated do
  root 'devise/sessions#new', as: :unauthenticated_root
 end
end

Теперь проблема в том, что root_path '/' перенаправляет правильно, и я могу войти в систему как пользователь.Но я не могу войти в систему как администратор.Он перенаправляет меня обратно к root_path, который является неаутентифицированным пользователем.

Но странно, когда я вхожу в систему как пользователь, я могу войти в систему как admin_user.

ОПЯТЬ Я ИСПОЛЬЗУЮ РАЗЛИЧНЫЕ ТАБЛИЦЫ, admin_users ипользователи

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Решено это.

Итак, проблема в том, что у вас есть activeadmin admin_users и таблица пользователей, созданная с помощью devise, и вы помещаете authenticated_user! before_action в application_controller, activeadmin интерпретирует это как ошибку авторизации (хотя это не должно иметь место).

Решение этой проблемы - перейти к active_admin.rb и добавить следующий код

config.skip_before_action :authenticate_user!

Это заставляет activeadmin прослушивать только свой authrization_adapter.

0 голосов
/ 15 сентября 2018

Я могу сказать вам простой способ добавить администратора в devise

$rails g migration add_admin_to_user

в db

 def change
    add_column :users, :admin , :boolean , {default: false}
  end

в user.rb

  def admin?
    admin
  end

<% if current_user && current_user.admin? %>
<% end %>

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

, а затем в rails c выберите адрес электронной почты, который вы хотите, чтобы он был администратором, например

User.last
user=User.last
user.admin=true
user
user.save
...