Attualmente sto cercando di determinare la causa di un bug di reindirizzamento in un'app Rails. Le specifiche sono documentate here, anche se non sto cercando una soluzione specifica qui su StackOverflow. Piuttosto, mentre sto lavorando per risolvere questo problema, mi piacerebbe sviluppare un modo generico per catturare, registrare e indagare su infiniti loop di reindirizzamento in un'app Rails.Rileva e cattura i loop infiniti di reindirizzamento in Rails
Ho un'idea qui, ma mi piacerebbe ancora vedere se ci sono tecniche provate e vere.
mia idea:
Override Rails' redirect_to
a 'log' reindirizza nella sessione:
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
Poi, hanno una sorta di analisi della matrice redirect per determinare se v'è un ciclo infinito :
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
d'accordo assolutamente, ma la sfida è quando non si conoscono gli ingressi quello causa il re-diretto! – Ultrasaurus
Grazie, @smathy. Ho postato questa domanda per arrivare a un codice funzionante o ad un algoritmo funzionante per il rilevamento ragionevole dei reindirizzamenti. I test sono un'altra cosa su cui sto lavorando per migliorare, ma non sono pertinente alla mia domanda specifica. – user94154
Verissimo, e non mi aspettavo che tu accettassi la mia risposta. Ma se qualcuno succede in tutta la tua domanda in una fase successiva, forse la mia risposta avrà ancora il maggior numero di voti e fornirà il modo migliore per proteggere un'applicazione di produzione in natura da questi tipi di problemi. – smathy