2012-03-30 1 views
5

ich eine benutzerdefinierte Abmelde Ansicht .I haben haben wie die Dekorateure hinzugefügt untersoll ich in meiner django Abmelde Ansicht @csrf_protect zusammen mit der Middleware

from django.views.decorators.cache import never_cache 
from django.views.decorators.csrf import csrf_protect 
from django.views.decorators.http import require_POST 
from django.contrib.auth.views import logout_then_login 

@csrf_protect 
@require_POST 
@never_cache 
def logout(request): 
    nxt=request.POST.get('next') 
    print 'next=',nxt 
    return logout_then_login(request, nxt) 

In meiner Einstellungsdatei Ich habe folgende Middleware-Klassen

Da die CsrfViewMiddleware hier enthalten ist, brauche ich wirklich das @csrf_protect für meine Ansicht Wenn ich beide benutze, wird es ein Problem/Konflikt geben?

Nebenbei, als ich die django source überprüfte, fand ich, dass die Dekoratoren nur für die Login-Ansicht und nicht für irgendwelche der Abmeldung, login_then_logout Ansichten angewendet werden. Warum ist das?

Jede Hilfe sehr willkommen

Antwort

5

Die Middleware Sie Schutz auf allen Ansichten Decke gibt - Hinzufügen der Dekorateur redundant ist. Die Django-Dokumentation empfiehlt, die Middleware über den Decorator zu verwenden, da sie einen besseren Schutz bietet.

Verwendung des Dekorateur von selbst wird nicht empfohlen, da, wenn Sie vergessen , es zu benutzen, müssen Sie ein Sicherheitsloch. Die "Gürtel und Hosenträger" Strategie der Verwendung von beiden ist in Ordnung, und wird nur minimalen Aufwand.

Die Dekorateure sind nicht für die Ansichten verwendet, die Sie erwähnen, weil es zu keinem Risiko einer Sitzung wenig ist über CSRF entführt zu werden, wenn ein login_then_logout Ereignis ausgelöst wird und es besteht kein Sicherheitsrisiko für einen Benutzer einmal eine Sitzung hat wurde zerstört.

Sie scheinen eine Menge Fragen in Bezug auf CSRF zu haben - kann ich Ihnen vorschlagen, sich auf Django's CSRF documentation und CSRF in general zu knacken?

+0

Dank @Todd, ein Neuling zu Django & Web-Entwickler bin, kämpfe ich um die Technologien zu verstehen..Ich bin durch den Django-Quellcode browning und oft verwirrt – damon

+1

@damon, würde ich nicht die Quelle als verwenden Anleitung zum Rahmen. Djangos Dokumente gehören zu den besten, die ich je benutzt habe (wenn nicht die * besten). Ich würde definitiv das Django Tutorial auf der Webseite lesen und es mit dem Rest der offiziellen Django Dokumentation ergänzen. – Todd

Verwandte Themen