2015-04-11 17 views
6

Stavo registrando la mia console di amministrazione django facilmente pochi minuti fa. Devo aver cambiato qualcosa da qualche parte che ha causato questo errore quando si effettua l'accesso come superutente:django admin login improvvisamente esigente token csrf

Proibito (403) Verifica CSRF non riuscita. Richiesta interrotta.

Questo errore mi ha colto di sorpresa mentre stavo registrando tutta la notte. Perché dovrei improvvisamente aver bisogno di un token csrf per l'accesso come amministratore? Penseresti che il segno in forma lo abbia già. Questo è il mio admin.py:

from django.contrib import admin 
from accounts.models import Image, Category, UserProfile 

class ImageAdmin(admin.ModelAdmin): 
    list_display = ["__unicode__", "title", "created"] 

admin.site.register(Image, GenericImageAdmin) 

class CategoryAdmin(admin.ModelAdmin): 
    list_display = ["category"] 

admin.site.register(Category, CategoryAdmin) 

admin.site.register(UserProfile) 
+0

Ho cancellato il database w flush e ora la mia app funziona e posso creare nuovi utenti e quant'altro. Ma non posso usare l'amministratore. Se faccio "createsuperuser", ottengo un utente amministratore e si lamenta che l'utente non ha un profilo utente. Questo è vero, facendo un superutente non fa userprofile userprofile- è fatto quando faccio un nuovo utente falso nella mia pagina di registrazione – codyc4321

+0

da modelli di importazione django.db da django.contrib.auth.models importazione degli utenti classe ProfiloUtente (Modelli.Modello): user = models.OneToOneField (Utente) Blurb = models.CharField (max_length = 800, default = '') def __unicode __ (self): ritorno self.user.username – codyc4321

+0

è solito Vorrei che fosse assomiglia al codice – codyc4321

risposta

7

login Admin fa normalmente richiedono un token CSRF, ma questo è normalmente tutti presi cura di voi.

  1. Controllare i cookie del browser per vedere se c'è un token CSRF presenti
  2. Prova a cancellare i cookie e rinfrescante
  3. Controllare per assicurarsi di avere django.middleware.csrf.CsrfViewMiddleware nel middleware
  4. Verificare che sei, sia su https oppure hai CSRF_COOKIE_SECURE=False (che è l'impostazione predefinita) nelle impostazioni, altrimenti il ​​cookie csrf esiste ma non verrà inviato. Elimina i cookie dopo aver modificato CSRF_COOKIE_SECURE.
+0

quindi, dopo il debug di un problema non è nemmeno lontanamente correlato a django.admin, funziona di nuovo. Vorrei poter aggiungere intuizioni per altri noj django, ma l'unica cosa che ho fatto è stato aggiungere manualmente UserProfiles (connesso come al solito) ai miei utenti da creauperuser 'classe UserProfile (models.Model): user = models.OneToOneField (Utente) ' – codyc4321

+0

Ho una pagina di registrazione in cui i nuovi utenti si registrano e sono costretti a creare userprofile dal modulo di registrazione, ora quando creo superutente dal comando manage.py c'è un modo pietoso più carino di dare loro un profilo utente vuoto invece di manualmente facendolo in shell, quindi premendo save()? Sembra molto 1995 quello che sto facendo – codyc4321

+0

Supponendo che tu abbia un profilo utente standard definito in settings.py, dovrebbe essere creato automaticamente quando crei un super utente, se la memoria serve. – ubadub

0

Aggiungere un token csrf al proprio contesto nella vista di accesso e nel proprio modello aggiungere nel div nascosto per il token csrf. Assicurati di avere django.middleware.csrf.CsrfViewMiddleware nella sezione middleware in settings.py.

Quindi aggiungere @csrf_protect alle viste da fare con il login. È anche possibile che tu abbia provato ad accedere con credenziali errate - hai bisogno di @csrf_protect nella vista di logout nelle viste della tua app.py chiami sull'URI appropriato per accedere/disconnettersi ecc. In urls.py anche. Il mio logout chiama semplicemente logout (richiesta), quindi chiama HttpResponseRedirect (''), che probabilmente non è perfetto, ma per ora me lo fa per i miei bisogni.

0

Questo errore appariva per me quando non avevo impostato CSRF_COOKIE_DOMAIN nel mio settings_local ma era impostato nel mio settings.py principale.

Nel mio caso ho impostato alla esempio host locale

CSRF_COOKIE_DOMAIN = '127.0.0.1' 
0

Come misura di sicurezza, ho avuto CSRF_COOKIE_SECURE = True nelle mie impostazioni. Cercando di accedere ad admin tramite localhost dove non c'è HTTPS ha gettato l'errore proibito.

Set per False a farlo funzionare su localhost

0

Questo potrebbe succedere anche quando si è già effettuato l'accesso al tuo sito web ospitato su un URL diverso da admin. E poi prova ad accedere al tuo pannello di amministrazione in una nuova scheda. Prova ad aprire il pannello di amministrazione in una finestra diversa.