我无法登录django管理页面。输入有效的用户名和密码后,它将再次显示登录页面,没有错误消息
这个问题在django FAQ中,但是我已经遍历了那里的答案,但仍然无法通过初始登录屏幕。
我在ubuntu 12.04上使用apache2和modwsgi使用django 1.4。
我已确认我正在admin.py
文件中注册admin ,请确保在添加后同步到db INSTALLED_APPS
。当我输入了错误的密码我DO得到一个错误,所以我的管理员用户进行认证,只是没有在进行管理页面。
我尝试SESSION_COOKIE_DOMAIN
将机器的IP和无都设置为两者。(确认cookie域在Chrome中显示为计算机的IP)
另外,检查用户是否通过外壳进行了身份验证:
>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff
True
>>> u.is_superuser
True
>>> u.is_active
True
尝试使用IE8和chrome canary登录,两者均会以相同的方式返回到登录屏幕。
还有其他我想念的东西吗????
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版本:
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>
更新
通过使用开发服务器时,管理页面确实会继续进行,runserver
因此似乎是wsgi / apache问题。仍未弄清楚。
解
问题是,我有设置文件SESSION_ENGINE
值设置为'django.contrib.sessions.backends.cache'
不具有CACHE_BACKEND
正确配置。
我已将SESSION_ENGINE更改为'django.contrib.sessions.backends.db'
可解决此问题的位置。
调试步骤:
django_session
表中正在创建记录吗?如果不
django_session
桌子django_session
表中正在创建记录吗?让我知道这是否打开任何有用的调试。
样本设置文件:https : //github.com/fyaconiello/Django-Blank-Bare-Bones-CMS/blob/master/dbbbcms/settings.py
谢谢,我检查了会话表,似乎没有创建一个条目。我仔细检查了一下,其设置与上面发布的设置相同,并且该表中没有任何条目。
好的,这为我指明了正确的方向。怀疑这是我的错误配置。在未正确配置CACHE_BACKEND 的情况下,将SESSION_ENGINE值设置为“ django.contrib.sessions.backends.cache” 。我已将SESSION_ENGINE更改为“ django.contrib.sessions.backends.db”,此问题已解决。
像@daigorocub一样,我只需要这样做
SESSION_COOKIE_SECURE = False
。显然,当将其设置为True且连接不是通过HTTPS(对于开发人员设置通常)时,由于没有会话cookie,因此无法记录登录名,因此您将被引导再次登录。当设置需要安全的cookie且连接不安全时,似乎应该出现错误-有点大的信号,说明您的网络安全被搞砸了-但这确实解决了登录管理员的直接问题。就我而言,我使用的是RemoteUserBackend进行身份验证,但是我忘记了配置Nginx以便在无法运行的计算机上设置REMOTE_USER。
注释掉
AUTHENTICATION_BACKENDS = ['Authentication.backends.EmailBackend']
对我有用。但这是否意味着我必须每次登录django admin时都必须将其注释掉?