ActiveAdmin 跳过路由的身份验证

ActiveAdmin skip Authentication for a route

这是我的路线:

                   admin_admin_users GET        /admin/admin_users(.:format)                admin/admin_users#index
                                     POST       /admin/admin_users(.:format)                admin/admin_users#create
                new_admin_admin_user GET        /admin/admin_users/new(.:format)            admin/admin_users#new
               edit_admin_admin_user GET        /admin/admin_users/:id/edit(.:format)       admin/admin_users#edit
                    admin_admin_user GET        /admin/admin_users/:id(.:format)            admin/admin_users#show

config/initializers/active_admin.rb

中的这一行
config.authentication_method = :authenticate_admin_user! 

将在所有控制器操作的前过滤器中自动调用身份验证方法,以确保当前有一个登录的管理员用户。 那么我该如何破例才能转到

http://localhost:3000/admin/admin_users/new 

要在未登录的情况下创建新管理员?

更新: 我将 skip_before_action 添加到我的控制器

  ActiveAdmin.register AdminUser do
      permit_params :email, :password, :password_confirmation, :first_name, :last_name, :phone_number
      controller do
        skip_before_action :authenticate_admin_user!, only: :new
      end
  ...
  end

它给我这个错误: Before process_action callback :authenticate_admin_user! has not been defined

在您想要跳过身份验证的控制器中(我想是 AdminUsers)...

skip_before_action :authenticate_admin_user!, only [:new]
  1. 找到负责身份验证的回调,例如authenticate_admin_user.

  2. 添加 skip_before_filter :authenticate_admin_user 到控制器 do 块。

    ActiveAdmin.register User, as: "User" do
     controller do
      skip_before_action :authenticate_admin_user!, only: :new
     end
    end
    

以上代码将跳过该特定控制器的回调。

authenticate_active_admin_user 授予您访问活动管理员身份验证用户的权限

controller do 
  skip_before_action :authenticate_active_admin_user, only: :new
end

https://www.rubydoc.info/gems/nsm-activeadmin/0.2.2/ActiveAdmin%2FResourceController%3Aauthenticate_active_admin_user

https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/base_controller.rb#L38

skip_before_action :authenticate_active_admin_user

对我来说很好用。

实际上,当列出回调操作时,在列表中找到它。

通过调查 activeadmin gem 基本代码,发现:

before_action :authenticate_active_admin_user

在 lib/active_admin/base_controller.rb。那是为所有控制器添加的前置过滤器。

只有在定义的情况下才能跳过一个动作(定义不仅意味着定义了实际的方法,而且必须在堆栈中用before_action定义一个动作,即由前一个before_action).

ActiveAdmin conf 中的行

config.authentication_method = :authenticate_admin_user!

是关于调用的方法而不是动作的名称。