【问题标题】:ActiveAdmin over ride after_sign_in_path_for methodActiveAdmin 覆盖 after_sign_in_path_for 方法
【发布时间】:2022-10-04 16:02:26
【问题描述】:

我使用Devise gem 进行身份验证,ActiveAdmin gem 也使用 Devise gem 作为依赖项。我想为 ActiveAdmin 启用 2FA,这就是为什么我想超越 after_sign_in_path_for 方法。我可以覆盖ApplicationController 中的方法,但对我来说听起来不对,因为这也会影响我们的正常登录。有什么方法可以超越 after_sign_in_path_for 仅适用于 ActiveAdmin。目前这就是我正在做的

class ApplicationController < ActionController::Base
  def after_sign_in_path_for
  end
end

如果我不能只覆盖 ActiveAdmin 控制器,那么如何处理没有 2FA 的正常登录和使用 2FA 的 ActiveAdmin 登录。像这样的东西。

class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    if resource.instance_of?(AdminUser)
      redirect_to setup_2fa_path
    else
      super # <-------- is this possible or is this correct ?
    end
  end
end

必须有一种方法,我只能为 ActiveAdmin 超越 after_sign_in_path_for。还是我需要在初始化程序中覆盖ActiveAdmin::Devise::SessionsController 类?将控制器登录名放在初始化程序中对我来说也不合适。

更新

我注意到还有一个问题,当控制到达after_sign_in_path 时,current_admin_user 已经设置好了。这是一个问题,因为用户可以跳过设置 2FA 并在浏览器中键入路径,例如 localhost:3000/admin,因为存在 current_admin_user,所以它们在其中。我可以在after_sign_in_path 中将 current_admin_user 设置为零,但我不确定这是否会为其他类型的攻击打开大门?我应该如何处理?还是我应该尝试使用不同的方法?我不知道是否有类似before_sign_in_path_for 或其他的东西。

【问题讨论】:

    标签: ruby-on-rails devise activeadmin


    【解决方案1】:

    一种方法是在ActiveAdmin 中打开和扩展Devise::SessionsController。根据https://medium.com/@acesubido/adding-two-factor-authentication-in-activeadmin-2ed134b60042https://medium.com/@acesubido/part-2-adding-two-factor-authentication-in-activeadmin-cc5eab67057c 讨论的代码,我设法使用一次性密码实现了 2fa

    另外:https://blog.kiprosh.com/adding-two-factor-authentication-2fa-for-activeadmin-auth-in-a-ruby-on-rails-web-application/ 可以启发灵感,我选择了第一个设置,它有 2 个步骤。此外,您可能希望在您的ApplicationController 中考虑一个before_action,它允许用户在登录后设置他们的2fa:

    def check_2fa
      return if current_admin_user.nil?
    
      redirect_to user_dashboard_two_factor_new_path 
        if current_admin_user.force_2fa && !current_admin_user.otp_required_for_login
    end
    

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多