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.
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
?
- voyez-vous un enregistrement créé dans le tableau
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
- vérifiez que vous avez un
- essayez de vous authentifier
- voyez-vous un enregistrement créé dans le tableau
django_session
?
- voyez-vous un enregistrement créé dans le tableau
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
>>> 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 avions un problème similaire dans notre application et ceux-ci pourraient aider:
-
Utiliser la commande de nettoyage pour effacer les anciennes sessions de django_sessions
-
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.
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 /
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:
- vérifiez que l'outil d'arrière-plan de votre session fonctionne.
- l'échange avec cache backend si vous utilisez db cache backend pour vérifier si la transaction middleware est en train de tourner.
- essayer db backend et vérifier s'il y a des sessions stockées dans le db tableau 151960920"
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.
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.
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.
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.
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.
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...
j'ai eu le même problème et il a été juste résolu après redémarrage du serveur:
systemctl restart nginx
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
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.
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.
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.