Je ne peux pas me connecter à la page d’administration de Django. Lorsque je saisis un nom d'utilisateur et un mot de passe valides, la page de connexion s'affiche à nouveau, sans message d'erreur.
Cette question est dans le Django FAQ , mais j’ai passé en revue les réponses et ne peux toujours pas passer l’écran de connexion initial.
J'utilise Django 1.4 sur Ubuntu 12.04 avec Apache2 et modwsgi.
J'ai confirmé que j'enregistre l'administrateur dans le fichier admin.py
, en veillant à synchroniser après l'ajout de INSTALLED_APPS
. Lorsque je saisis un mot de passe incorrect, je _ {DO _ reçois une erreur. Mon utilisateur administrateur est donc en cours d'authentification mais ne passe pas à la page admin.
J'ai essayé de régler SESSION_COOKIE_DOMAIN
sur l'IP de la machine et sur Aucun. (Confirmation que le domaine de cookie indique que l'adresse IP de la machine est chromée)
Vérifiez également que l’utilisateur s’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 utilisant IE8 et chrome Canary, les deux résultats entraînent 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()
Version Apache:
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>
UPDATE
La page admin continue lorsque vous utilisez le serveur de développement via runserver
. Cela ressemble donc à un problème wsgi/Apache. Je ne l'ai toujours pas compris.
SOLUTION
Le problème était que le fichier de paramètres SESSION_ENGINE
avait la valeur 'Django.contrib.sessions.backends.cache'
sans _ et que le CACHE_BACKEND
était correctement configuré.
J'ai changé le SESSION_ENGINE en 'Django.contrib.sessions.backends.db'
qui a résolu le problème.
Étapes pour déboguer:
Django_session
?SI NON
Django_session
Django_session
?Faites-moi savoir si cela s'avère utile pour le débogage.
Exemple de fichier de paramètres: https://github.com/fyaconiello/Django-Blank-Bare-Bones-CMS/blob/master/dbbbcms/settings.py
>>> 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
Nous avons eu un problème similaire dans notre application et ceux-ci pourraient aider:
Utilisez la commande de nettoyage pour effacer les sessions plus anciennes de Django_sessions
Vérifiez la taille des cookies dans les outils de développement firefox (firebug) ou chrome. La messagerie étant activée par défaut dans admin (Django.contrib.messages.middleware.MessageMiddleware), la taille du cookie dépasse parfois 4096 octets avec plusieurs 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 de mémoire liés à Apache. Je n'ai pas vu cela se répéter dans nginx depuis.
cela ressemble à un problème de session car après le post, vous êtes redirigé et le système a immédiatement oublié que vous vous êtes connecté.
essayez ce qui suit:
Je ne crois pas que le mot de passe administrateur est stocké dans le fichier settings.py. Il a été créé lors de votre première synchronisation. Je pense que vous avez soit sauté la création du superutilisateur, soit créé une faute de frappe . Essayez de l’exécuter dans le terminal à la racine de votre projet:
python Django-admin.py crée un utilisateur supérieur
Cela vous permettra de retaper votre login administrateur. Voir aussi ici https://docs.djangoproject.com/en/dev/ref/Django-admin/
En vérifiant d’autres articles sur ce sujet, cela pourrait être lié à sys.path. Pouvez-vous vérifier et comparer sys.path lors de l'exécution du serveur dev et de WSGI.
Pour certains détails, regardez ceci et cet article . Mais je vérifierais d’abord le sys.path avant d’entrer dans les détails de cet article.
Vérifiez que vous avez au moins une site
avec laquelle travailler.
>>> 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éez-en un.
J'ai eu ce problème. Le problème est qu'en production, j'ai défini deux variables sur True
qui m'ont permis de me connecter au site en utilisant https.
SESSION_COOKIE_SECURE
et CSRF_COOKIE_SECURE
doivent être définis sur False
si vous développez sur localhost http. La modification de ces deux variables en False
m'a permis de me connecter au site d'administration lors du développement local.
Je ne suis pas tout à fait sûr, mais le problème pourrait venir de 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'avais des problèmes pour naviguer dans l'administration de mon projet Django, car une configuration d'URL unique remplaçait une partie de l'URL de l'administrateur. Il semble que Django n’aime pas cela lorsque vous spécifiez une configuration d’URL personnalisée contenant des éléments qui font également partie de l’URL d’administrateur. Dans votre cas, l'application Django.contrib.sites
est activée 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/'
dans celle-ci remplace une partie de l'URL de l'administrateur. Essayez de renommer cette configuration d'URL spécifique ou désactivez Django.contrib.sites
dans INSTALLED_APPS
à des fins de test.
Veuillez noter qu'il ne s'agit que d'une hypothèse. Tout ce que je sais, c'est que le panneau d'administration de Django est un peu difficile en ce qui concerne les configurations d'URL utilisant des noms similaires, comme ses propres URL. Je ne peux pas le tester moi-même pour le moment. Mais peut-être que cela vous aide un peu.
Disclaimer: Je ne peux pas encore ajouter de commentaires, je dois donc demander une clarification en proposant une solution en même temps. Désolé.
L'utilisateur est-il déconnecté immédiatement après la connexion? quelque chose comme ce numéro
Vous pouvez le vérifier de différentes manières. 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 vérifiez si le message apparaît dans votre console. S'il apparaît, vous devez alors vérifier si vous avez une redirection ou un modèle personnalisé en vous déconnectant après la connexion. J'espère que cela vous aidera à trouver le problème.
Assurez-vous que votre table d'utilisateurs de base de données ayant l'entrée suivante est vraie:
is_staff => True (if exit).
is_active => True .
is_superuser => True.
J'ai eu le même problème et il vient d'être résolu après le redémarrage du serveur:
systemctl restart nginx
J'ai eu un problème connexe où j'essayais de me connecter et que la page serait suspendue avant que le socket ne soit tué. Il s'est avéré que j'étais effectivement connecté, mais l'un des processeurs de signal de connexion était gelé.
Le céleri n'a pas pu transmettre ses tâches asynchrones à RabbitMQ car le serveur RabbitMQ n'a pas pu démarrer.
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 migre vers le serveur de déploiement ...
Pour moi, je ne pouvais pas me connecter à la page d’administrateur de Firefox mais je pouvais me connecter à chrome . Le problème était que CSRF_COOKIE_PATH était défini dans mon fichier settings.py . Ne jamais l’utiliser. Cela ne fonctionne pas correctement sur Django 1.8.
Vous pouvez vous assurer que l'utilisateur créé a été signalé par Is_staff = True, j'oublie parfois de le signaler pour permettre aux utilisateurs de se connecter à l'administrateur Django.