Ruby on rails 如何覆盖设计安全扩展PasswordExpiredController
我想覆盖显示逻辑,以便不仅在密码过期时,而且在几天前允许更改密码。在过滤逻辑之前,我需要修改或替换此Ruby on rails 如何覆盖设计安全扩展PasswordExpiredController,ruby-on-rails,devise,Ruby On Rails,Devise,我想覆盖显示逻辑,以便不仅在密码过期时,而且在几天前允许更改密码。在过滤逻辑之前,我需要修改或替换此 def skip_password_change return if !resource.nil? && resource.need_change_password? redirect_to :root end 我想让我的控制器如下: class PasswordsController < Devise::PasswordExpiredController
def skip_password_change
return if !resource.nil? && resource.need_change_password?
redirect_to :root
end
我想让我的控制器如下:
class PasswordsController < Devise::PasswordExpiredController
# ...
def skip_password_change
return if !resource.nil? && (resource.need_change_password? || ... )
redirect_to :root
end
end
类密码控制器
如何实现我的目标
UPD:
下面所有的答案都是对的,我遗漏了一件事——我的自定义控制器被放在controllers/admin目录中,所以我应该将其命名为admin::CustomPasswordExpiredController,但我遗漏了名称空间前缀admin,rails陷入了循环依赖 您可以尝试此解决方法,首先跳过跳过密码更改
方法的默认操作之前
,然后添加自定义方法将其包装在条件中。试试这个
class PasswordsController < Devise::PasswordExpiredController
skip_before_action :skip_password_change, only: :show
before_action :skip_password_change_show, only: :show
def skip_password_change_show
return if !resource.nil? && (resource.need_change_password? || #yourcondition )
redirect_to :root
end
end
类密码控制器
希望有帮助 转到路由文件并覆盖其中的控制器方法
类似于designe\u for:users,controllers:{x:'y'}
的内容,其中x是要覆盖的designe控制器的名称,y是要覆盖的自定义控制器的名称只需使用自定义控制器扩展designe控制器即可:
# config/routes.rb
devise_for :users, controllers: { passwords: 'custom_passwords' }
# app/controllers/custom_passwords_controller.rb
class CustomPasswordsController < Devise::PasswordsController
def edit
resource = resource_class.new
return unless resource.need_change_password? # your middleware logic here
super
end
end
#config/routes.rb
为用户、控制器设计密码:{passwords:'custom_passwords'}
#app/controllers/custom_passwords_controller.rb
类CustomPasswordsController
更多设施可在Desive中找到(通过单击“查看来源”)plz发布您的错误堆栈跟踪无法再现错误,我将问题简单地改为“如何…”,因为我不是舒尔,如果在这里使用Desive_是正确的,因为security_extension_gem补丁程序路由不使用designe_for method:问题是:如何使应用程序使用我的自定义密码控制器,而不是designe::passwordexpireedcontroller,它是由designe_security_extensions gem引入的