覆盖活动管理会话控制器

时间:2018-01-02 12:47:10

标签: ruby-on-rails devise ruby-on-rails-5 activeadmin

我需要为主动管理员添加两个因素身份验证。 每当管理员尝试登录时,我都需要在提供访问权限之前验证它们。验证可以通过向电子邮件或移动设备发送OTP来完成。 因此,我需要过度使用Sessions控制器进行活动管理设备,以便我可以为其添加功能。 我找到了一个解决方案,说我们可以在initializers文件夹中执行此操作。 我骑过创造方法并且工作正常。

#配置/初始化/ active_admin_devise_sessions_controller.rb

 class ActiveAdmin::Devise::SessionsController
   include ::ActiveAdmin::Devise::Controller
   def create

   if params[:admin_user].present? 
    email = params[:admin_user][:email]
    password = params[:admin_user][:password]
    admin_user = AdminUser.find_by_email(email)
    if admin_user.present? && admin_user.valid_password?(password)
    @admin_user = admin_user
    redirect_to verification_method_path
    end
   else
     flash[:error] = "No User Found"
     redirect_to :back
   end


  end

  def verification_method

  end

end

现在我的问题是我想添加几个方法,以便我可以为登录验证过程呈现一些视图。 我无法在会话控制器中为活动管理员添加任何自定义路由,因此我可以调用它并根据需要使用。

我的有效管理路线

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

我的自定义GET路由,用于呈现第二个表单以进行登录验证

#active管理员会话控制器验证路由

 get '/admin/verification_method' => 'active_admin/devise/sessions#verification_method', via: :get, as: "verification_method"

我没有找到与我的问题类似的东西。 请指导我如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您的active_admin资源内部将创建操作及其路由:

ActiveAdmin.register ResourceName do
  member_action :action_name, method: :post do
    # action code
  end
end

因此,您可以在此处设置自定义操作,其路由将由ActiveAdmin自动创建

更新

另一种方法是在routes.rb中手动创建您需要的路线,如下所示:

match "/admin/something" => 'admin/controller_name#action_name', via: :get, as: "something"