Impossible de se connecter à la page d'administration de django avec un nom d'utilisateur et un mot de passe valides

Je ne peux pas me connecter à la page d'administration de django. Lorsque j'entre un nom d'utilisateur et un mot de passe valides, il affiche à nouveau la page de connexion, sans aucun message d'erreur

cette question Est dans le Django FAQ , mais j'ai passé en revue les réponses là-bas et ne peut toujours pas passer l'écran de connexion initiale.

j'utilise django 1.4 sur ubuntu 12.04 avec apache2 et modwsgi.

j'ai confirmé que je suis en enregistrant l'administrateur dans le fichier admin.py , assurez-vous de synchroniser le fichier après avoir ajouté INSTALLED_APPS . Quand j'entre le mauvais mot de passe je DO obtenir une erreur, de sorte que mon utilisateur administrateur est en cours d'authentification, tout simplement pas de procéder à la page administrateur.

j'ai essayé de régler SESSION_COOKIE_DOMAIN sur L'IP de la machine et aucun. (Confirmé que le cookie de domaine montre que l'IP de la machine dans google chrome)

également, vérifié que l'utilisateur authentifie via le shell:

>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff
True
>>> u.is_superuser
True
>>> u.is_active 
True

tentative de connexion en utilisant IE8 et chrome canary, les deux résultats dans le même retour à l'écran de connexion.

y a-t-il autre chose qui me manque????

settings.py

...
MIDDLEWARE_CLASSES = (
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',    
    'django.contrib.staticfiles',
    'django.contrib.gis',
    'myapp.main',
)

SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_SAVE_EVERY_REQUEST = True
SESSION_COOKIE_AGE = 86400 # sec
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_NAME = 'DSESSIONID'
SESSION_COOKIE_SECURE = False

urls.py

from django.conf.urls.defaults import * #@UnusedWildImport
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^bin/', include('myproject.main.urls')),    
    (r'^layer/r(?P<layer_id>d+)/$', "myproject.layer.views.get_result_layer"),
    (r'^layer/b(?P<layer_id>d+)/$', "myproject.layer.views.get_baseline_layer"),
    (r'^layer/c(?P<layer_id>d+)/$', "myproject.layer.views.get_candidate_layer"),    
    (r'^layers/$', "myproject.layer.views.get_layer_definitions"),
    (r'^js/mapui.js$', "myproject.layer.views.view_mapjs"),
    (r'^tilestache/config/$', "myproject.layer.views.get_tilestache_cfg"),
    (r'^admin/', include(admin.site.urls)),  
    (r'^sites/', include("myproject.sites.urls")),  
    (r'^$', "myproject.layer.views.view_map"),
)


urlpatterns += staticfiles_urlpatterns()

Apache Version:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin ironman@localhost
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin ironman@localhost
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

mise à JOUR

la page d'administration ne procéder lors de l'utilisation du serveur de développement via runserver il semble donc comme un problème wsgi/apache. Je n'ai toujours pas compris encore.

SOLUTION

Le problème était que j'avais le fichier de paramètres SESSION_ENGINE valeur 'django.contrib.sessions.backends.cache' sans ayant le CACHE_BACKEND correctement configuré.

j'ai changé le moteur de session en 'django.contrib.sessions.backends.db' qui a résolu le problème.

36
demandé sur monkut 2012-08-10 06:45:15

16 réponses

étapes pour déboguer:

  • assurez-vous que votre base de données est synchronisée
    • vérifiez que vous avez un django_session table
  • essayez de vous authentifier
    • voyez-vous un enregistrement créé dans le tableau django_session ?

SI CE N'EST

  • supprimer les réglages non standard
    • AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
    • SESSION_EXPIRE_AT_BROWSER_CLOSE = True
    • SESSION_SAVE_EVERY_REQUEST = True
    • SESSION_COOKIE_AGE = 86400 # sec
    • SESSION_COOKIE_DOMAIN = None
    • SESSION_COOKIE_NAME = 'DSESSIONID'
    • SESSION_COOKIE_SECURE = False
  • assurez-vous que votre base de données est synchronisée
    • vérifiez que vous avez un django_session table
  • essayez de vous authentifier
    • voyez-vous un enregistrement créé dans le tableau django_session ?

faites-moi savoir si cela s'avère utile pour déboguer.

fichier de réglages D'échantillon: https://github.com/fyaconiello/Django-Blank-Bare-Bones-CMS/blob/master/dbbbcms/settings.py

42
répondu Francis Yaconiello 2012-08-24 13:39:20
>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff True
>>> u.is_superuser True

Is there something else I'm missing????

u.is_active devrait être True

9
répondu Burhan Khalid 2012-08-23 09:40:09

nous avions un problème similaire dans notre application et ceux-ci pourraient aider:

  1. Utiliser la commande de nettoyage pour effacer les anciennes sessions de django_sessions

  2. Vérifiez la taille des cookies dans les outils firefox(firebug) ou chrome developer. Parce que la messagerie est activée par défaut dans admin (django.contrib.message.intergiciel.MessageMiddleware), la taille du cookie peut parfois dépasser 4096 octets avec de multiples modifications et suppressions. Un test rapide consiste à supprimer le cookie "message" et voir si vous pouvez vous connecter après cela.

et nous avons finalement opté pour la route nginx/uwsgi à cause de cela et d'autres problèmes liés à la mémoire avec apache. Je n'ai pas vu cela répété dans nginx depuis.

3
répondu Raj J 2012-08-28 08:36:38

Je ne crois pas que le mot de passe administrateur est stocké dans le settings.py file. Il a été créé lors de votre première syncdb. Je pense que vous avez soit sauté la création du super-utilisateur ou juste fait une typographie. Essayez d'exécuter dans le terminal à la racine de vos projets.:

python django-admin.py createsuperuser

qui vous permettra de retaper votre identifiant d'administrateur. Aussi vu ici https://docs.djangoproject.com/en/dev/ref/django-admin /

2
répondu Kei Nagase 2012-08-12 02:48:41

ressemble à un problème de session parce qu'après le post vous êtes redirigé et immédiatement le système a oublié que vous vous êtes connecté.

essayez ce qui suit:

  1. vérifiez que l'outil d'arrière-plan de votre session fonctionne.
  2. l'échange avec cache backend si vous utilisez db cache backend pour vérifier si la transaction middleware est en train de tourner.
  3. essayer db backend et vérifier s'il y a des sessions stockées dans le db tableau 151960920"
2
répondu frog32 2012-08-23 09:34:54

Je ne suis pas exactement sûr, mais le problème pourrait être avec votre configuration D'URL, concrètement dans ces deux lignes:

(r'^admin/', include(admin.site.urls)),  
(r'^sites/', include("myproject.sites.urls")),

il y a plus longtemps, j'ai eu du mal à parcourir l'administrateur de mon projet Django parce qu'une seule configuration D'URL écrasait une partie de l'url administrateur. Il semble que Django n'aime pas quand vous spécifiez une configuration D'URL personnalisée qui contient des éléments qui font aussi partie de l'URL administrateur. Dans votre cas, vous avez l'application django.contrib.sites activé dans votre settings.py . Vous pouvez accéder au panneau d'administration de cette application en allant à http://127.0.0.1:8000/admin/sites/ . Il se peut que votre configuration d'URL avec r'^sites/' il remplace une partie de l'url administration. Essayez de renommer cette configuration D'URL spécifique ou désactiver django.contrib.sites dans INSTALLED_APPS à des fins de test.

veuillez noter que ce n'est qu'une hypothèse. Tout ce que je sais, C'est que le panneau d'administration de Django est un peu difficile sur les configurations D'URL utilisant des noms similaires comme le sien. URL. Je ne peux pas le tester moi-même pour le moment. Mais peut-être que cela vous aide un peu.

1
répondu pemistahl 2012-08-22 17:23:43

Vérifiez que vous avez au moins un site pour travailler avec.

>>> from django.contrib.sites.models import Site
>>> Site.objects.count()
(0.048) SELECT COUNT(*) FROM `django_site`; args=()
1

si vous voyez 0 ici - Créer un.

1
répondu Alexey Kachayev 2012-08-27 11:16:22

vérifier quelques autres articles sur ce sujet, il pourrait être lié à sys.chemin. Pouvez-vous vérifier et comparer sys.chemin lors de l'exécution du serveur dev et lors de L'exécution de WSGI.

Pour plus de détails, consultez ce et que article . Mais je vérifierais les systèmes.path first, avant d'entrer dans les détails de cet article.

1
répondu schacki 2012-08-27 14:13:38

j'ai eu ce problème. Le problème est que dans la production j'ai mis deux variables à True qui m'ont permis de me connecter au site en utilisant https.

SESSION_COOKIE_SECURE et CSRF_COOKIE_SECURE doit être réglé sur False si vous développez sur localhost http. Changer ces deux variables en False m'a permis de m'inscrire sur le site d'administration lors du développement local.

1
répondu Marquistador 2018-05-20 16:02:46

avertissement: Je ne peux pas encore ajouter de commentaires, je dois donc demander des éclaircissements ici en proposant une solution en même temps. Désolé pour ça.

Est l'utilisateur connecté immédiatement après l'enregistrement? quelque chose comme ce numéro

vous pouvez le vérifier de plusieurs façons, je suggère d'ajouter un crochet au signal de déconnexion (vous pouvez le mettre dans votre models.py):

from django.contrib.auth.signals import user_logged_out

def alertme(sender, user, request, **kwargs):
    print ("USER LOGGED OUT!") #or more sophisticate logging

user_logged_out.connect(alertme)

, puis essayez de vous connecter et de vérifier si le le message apparaît dans votre console. S'il apparaît, alors vous devez vérifier si vous avez une redirection ou un modèle personnalisé d'appel de déconnexion après la connexion. Espérons qu'il vous aide à trouver le problème.

0
répondu furins 2017-05-23 12:10:46

avez-vous essayé en créant l'utilisateur avec:

python manage.py createsuperuser

j'ai le même problème lorsque je crée la base de données sur une machine de test et que je la déplace vers le serveur de déploiement...

0
répondu Lapin-Blanc 2012-08-25 08:38:45

j'ai eu le même problème et il a été juste résolu après redémarrage du serveur:

systemctl restart nginx
0
répondu lapin 2016-06-16 08:03:10

vous pouvez vous assurer, l'utilisateur créé a été marqué comme Is_staff = True, j'oublie parfois de le signaler pour permettre aux utilisateurs de se connecter à django admin

0
répondu Timothy 2016-12-13 12:20:22

j'ai eu un problème connexe où j'ai essayé de me connecter et la page serait pendu avant que le socket serait éventuellement tué. Il s'est avéré que j'étais bien connecté, mais l'un des processeurs de signal de connexion était gelé.

Celery ne pouvait pas passer ses tâches asynchrones à RabbitMQ parce que le serveur de RabbitMQ n'était pas en mesure de démarrer.

0
répondu kokociel 2018-02-09 21:09:41

pour moi, Je ne pouvais pas me connecter à la page admin de firefox mais je pouvais me connecter dans chrome. Le problème était que J'avais CSRF_COOKIE_PATH défini dans mon settings.py. Ne jamais l'utiliser. Il ne fonctionne pas correctement sur django 1.8.

0
répondu max 2018-03-09 18:32:05

assurez-vous que votre table d'utilisateur de base de données ayant l'entrée suivante est vraie:

is_staff  => True  (if exit).
is_active  => True .
is_superuser => True.
0
répondu Dnyaneshwar Mahajan 2018-09-27 10:19:17