2015-04-11 15 views
6

Zalogowałem się do mojej konsoli administracyjnej django kilka minut temu. Musiałem zmienić coś, co spowodowało ten błąd podczas logowania jako superuser:admin django login nagle wymagający tokena csrf

Forbidden (403) Weryfikacja CSRF nie powiodła się. Żądanie zostało przerwane.

Ten błąd zaskoczył mnie, gdy logowałem się przez całą noc. Dlaczego nagle potrzebuję tokena csrf do logowania przez administratora? Wydawałoby się, że formularz już to ma. To jest mój admin.py:

+0

Oczyściłem bazę danych w kolorze, a teraz moja aplikacja działa i mogę tworzyć nowych użytkowników i inne. Ale nie mogę użyć administratora. Jeśli zrobię "createduperuser", otrzymam administratora i narzeka, że ​​użytkownik nie ma profilu użytkownika. To prawda, robiąc superuser nie czyni userprofile- userprofile jest wykonany kiedy robię nową Fake w moją stronę rejestracji – codyc4321

+0

z django.db modeli importowych z django.contrib.auth.models importować Użytkownikowi klasy UserProfile (modele.Modelu): user = models.OneToOneField (User) blurb = models.CharField (maksymalna długość = 800, domyślnie = '') def __unicode __ (self): powrót self.user.username – codyc4321

+0

przyzwyczajenie pozwól mi go wygląda jak kod – codyc4321

Odpowiedz

7

Logowanie administratora zwykle wymaga tokena csrf, ale zwykle to wszystko zajmuje się tobą.

  1. Sprawdź pliki cookie, aby sprawdzić, czy jest token CSRF obecny
  2. Spróbuj wyczyścić ciasteczka i orzeźwiający
  3. Sprawdź, czy masz django.middleware.csrf.CsrfViewMiddleware w middleware
  4. Sprawdź, czy jesteś albo na https lub masz CSRF_COOKIE_SECURE=False (co jest domyślne) w ustawieniach, w przeciwnym razie plik cookie csrf istnieje, ale nie zostanie wysłany. Usuń pliki cookie po zmianie CSRF_COOKIE_SECURE.
+0

, więc po debugowaniu problemu, który nie jest blisko związany z django.admin, działa on ponownie. Chciałbym dodać wgląd dla innych django noobs, ale jedyną rzeczą, którą zrobiłem, było ręczne dodanie UserProfiles (połączonych jak zwykle) do moich użytkowników z createuperuser 'class UserProfile (models.Model): user = models.OneToOneField (User) ' – codyc4321

+0

Mam stronę rejestracji, na której nowi użytkownicy rejestrują się i są zmuszeni do utworzenia profilu użytkownika z formularza rejestracji, teraz kiedy tworzę superużytkownika z polecenia manage.py jest ładniejszy sposób pythony, aby dać im pusty profil użytkownika zamiast ręcznie robiąc to w powłoce, a następnie naciskając save()? Wydaje się, że w 1995 roku to, co robię, – codyc4321

+0

Zakładając, że masz standardowy profil użytkownika zdefiniowany w pliku settings.py, powinien on zostać utworzony automatycznie podczas tworzenia superużytkownika, jeśli pamięć jest obsługiwana. – ubadub

0

Dodaj tokena csrf do swojego kontekstu w widoku logowania iw szablonie dodaj ukryty element div dla tokenu csrf. Upewnij się, że masz django.middleware.csrf.CsrfViewMiddleware w sekcji oprogramowania pośredniego w swoim settings.py.

Następnie dodaj @csrf_protect do swoich widoków w celu zalogowania. Możliwe jest również, że próbowałeś się zalogować z niepoprawnymi danymi uwierzytelniającymi - potrzebujesz @csrf_protect w widoku wylogowania w view.py Twojej aplikacji. Wywołaj odpowiednie URI do zalogowania/wylogowania itp. Również w urls.py. Moje wylogowanie po prostu wywołuje wylogowanie (żądanie), a następnie wywołuje HttpResponseRedirect (''), który prawdopodobnie nie jest doskonały, ale robi to teraz dla moich potrzeb.

0

Ten błąd pojawił się dla mnie, gdy nie ustawiłem CSRF_COOKIE_DOMAIN w moim ustawieniu_konta, ale zostało ustawione w moim głównym pliku settings.py.

W moim przypadku mogę ustawić go do miejscowego np gospodarza

CSRF_COOKIE_DOMAIN = '127.0.0.1' 
0

jako środek bezpieczeństwa, miałem CSRF_COOKIE_SECURE = True w moich ustawień. Próba zalogowania się do administratora przez localhost, gdzie nie ma HTTPS, rzuciła niedozwolony błąd.

Ustaw go False aby dostać pracy na localhost

0

To może się zdarzyć, gdy jesteś już zalogowany na swojej stronie hostowane na adresie URL innego niż administrator. A następnie spróbuj zalogować się do panelu administratora w nowej karcie. Spróbuj otworzyć panel administracyjny w innym oknie.