【发布时间】: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