gpt4 book ai didi

ruby-on-rails - 以编程方式检测并捕获 Rails 中的无限重定向循环

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:44 25 4
gpt4 key购买 nike

我目前正在尝试确定 Rails 应用程序中讨厌的重定向错误的原因。详细信息记录在案 here ,虽然我不是在 StackOverflow 上寻找特定的解决方案。相反,当我致力于解决此问题时,我想开发一种通用方法来捕获、记录和调查 Rails 应用程序中的无限重定向循环。

我有一个想法,但我仍然想看看是否有任何经过实践检验的技术。

我的想法:

覆盖 Rails 的 redirect_to 以在 session 中“记录”重定向:

def redirect_to(destination)
session[:redirects] << {destination: destination, timestamp: Time.now}
if is_inifinite_redirect?(session[:redirects])
render "a_redirect_error_page"
else
super
end
end

然后,对重定向数组进行某种分析以确定是否存在无限循环:

def is_inifinite_redirect?(redirects)
recent = redirects.last(21) # 21 is the max redirects allowed by Chrome
return recent.odds.map(&:destination).uniq.length == 1 && \
recent.evens.map(&:destination).uniq.length == 1 && \
(recent.last.timestamp - recent.first.timestamp < 10.seconds)
end

最佳答案

我同意测试应该理论上防止您陷入无限的重定向循环。但我知道测试不是您问题的答案。

我认为只要连续两个重定向具有相同的参数,您就可以考虑无限重定向循环。我认为没有充分的理由等待更多重定向。

我的想法是将重定向的参数存储到 flash 中。如果 flash 中的参数在下一次重定向发生时仍然相同,那么您就处于循环中。如果重定向到另一个位置或在其间呈现普通页面,则该位置将不匹配或 flash 将为空:

def redirect_to(*args)
if flash[:redirected_with_args] == args
raise "Infinited redirect loop detected: #{args.inspect}"
else
flash[:redirected_with_args] = args
super
end
end

关于ruby-on-rails - 以编程方式检测并捕获 Rails 中的无限重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29156975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com