Ich habe ein kleines bisschen Middleware geschrieben, die abfängt, wenn ein Benutzer ein temporäres Kennwort verwendet, und, wenn so, leitet sie sie zu einer Seite weiter, die sie zwingt, ein neues Kennwort zu verursachen. Mein Problem ist, dass die Seite funktioniert, wenn der Benutzer angemeldet ist und kein temporäres Passwort verwendet (dh sie gehen manuell auf die URL zum Ändern des Passworts), aber wenn sie ein temporäres Passwort verwenden, ergibt die Umleitung von der Middleware eine verbotene Seite .Django process_view Middleware resultierend in 403 verboten
Die Middleware hat eine andere Sache in process_view nach der temporären Passwortprüfung, aber dies ist der entsprechende Code:
class MyMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
if request.user.is_authenticated():
try:
if request.user.get_profile().using_temp:
return HttpResponseRedirect(reverse('change_password'))
except Object.DoesNotExist:
pass
# Not using temp password, let the request process
return None
Beachten Sie, dass die Vorlage Rendering direkt verwendet werden könnte, mit so etwas wie render_to_response, zu beheben Problem, aber das wird dazu führen, dass die URL des Browsers nicht so gut folgt, da die Seite, die sie rendert, nicht wirklich verlassen werden kann.
Das ist nicht der Code, der 403 anhebt. Jedoch wird dieser Code * in * eine unendliche Umleitung ergeben. –
Die HttpResponseRedirect Linie verursacht die 403, irgendwo in Djangos Innereien wird die tatsächliche 403 angehoben. Wenn die Zeile in "HttpResponse (" Test ") zurückkehrt, funktioniert es gut, es hat also etwas damit zu tun, dass die Weiterleitungen ausgelöst werden. –
Also die Frage ist, was ist der beste Weg, dies anders zu machen oder wie die Middleware die Verarbeitung der Weiterleitung zu stoppen. –