无法使用有效的用户名和密码登录django管理页面

mon*_*kut 41 python django mod-wsgi login admin

我无法登录django管理页面.当我输入有效的用户名和密码时,它只会再次显示登录页面,没有错误消息

这个问题在django常见问题解答中,但我已经在那里找到答案,仍然无法通过初始登录屏幕.

我在ubuntu 12.04上使用django 1.4和apache2以及modwsgi.

我已经确认我在admin.py文件中注册了admin ,确保在添加后确认syncdb INSTALLED_APPS.当我输入了错误的密码我DO得到一个错误,所以我的管理员用户进行认证,只是没有在进行管理页面.

我已经尝试过设置SESSION_COOKIE_DOMAIN机器的IP和无.(确认cookie域显示为Chrome中机器的IP)

另外,检查用户是否通过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
Run Code Online (Sandbox Code Playgroud)

尝试使用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
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

Apache版本:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

UPDATE

管理页面确实在使用开发服务器时继续进行,runserver因此它似乎是一个wsgi/apache问题.还没有想出来.

问题是,我有设置文件SESSION_ENGINE设定值'django.contrib.sessions.backends.cache' ,而不具有CACHE_BACKEND正确配置.

我已经将SESSION_ENGINE更改为'django.contrib.sessions.backends.db'解决问题的方法.

Fra*_*llo 49

调试步骤:

  • 确保同步数据库
    • 仔细检查你有一个django_session表
  • 尝试进行身份验证
    • 你看到django_session表中创建的记录了吗?

如果不

  • 删除非标准设置
    • AUTHENTICATION_BACKENDS =('django.contrib.auth.backends.ModelBackend',)
    • SESSION_EXPIRE_AT_BROWSER_CLOSE = True
    • SESSION_SAVE_EVERY_REQUEST =真
    • SESSION_COOKIE_AGE = 86400#秒
    • SESSION_COOKIE_DOMAIN =无
    • SESSION_COOKIE_NAME ='DSESSIONID'
    • SESSION_COOKIE_SECURE =错误
  • 确保同步数据库
    • 仔细检查你有一张django_session桌子
  • 尝试进行身份验证
    • 你看到django_session表中创建的记录了吗?

如果这出现任何有用的调试,请告诉我.

示例设置文件:https://github.com/fyaconiello/Django-Blank-Bare-Bones-CMS/blob/master/dbbbcms/settings.py

  • 就我而言,只是SESSION_COOKIE_SECURE = False解决了它. (19认同)
  • 就像@daigorocub一样,我只需要做'SESSION_COOKIE_SECURE = False`.显然,当此设置为True且连接未通过HTTPS(典型的开发设置)时,由于没有会话cookie,因此无法记录登录,因此您将被指示再次登录.看起来当设置需要安全cookie并且连接不安全时应该会出现错误 - 这是一个大红旗,表明您的网络安全性已经搞砸了 - 但它确实解决了登录管理员的直接问题. (7认同)

Bur*_*lid 13

>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff True
>>> u.is_superuser True
Run Code Online (Sandbox Code Playgroud)

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

u.is_active 应该 True

  • 对我来说,'is_staff`奇怪的是'假' (3认同)

Mar*_*dor 12

我有这个问题。问题是在生产中我设置了两个变量True,允许我使用 https 连接到站点。

SESSION_COOKIE_SECURE如果您在 localhost http 上开发,CSRF_COOKIE_SECURE则应设置为False。更改这两个变量以False允许我在本地开发时登录管理站点。