70

django管理ページにログインできません。有効なユーザー名とパスワードを入力すると、エラーメッセージなしでログインページが再度表示されます

この質問はdjangoFAQにありますが、そこで回答を確認しましたが、まだ最初のログイン画面を通過できません。

私はubuntu12.04でapache2とmodwsgiを使用してdjango1.4を使用しています。

管理者をadmin.pyファイルに登録していることを確認しました。追加後にsyncdbを確認してINSTALLED_APPSください。間違ったパスワードを入力するとエラーが発生するため、管理者ページに進まないだけで、管理者ユーザーが認証されます。

SESSION_COOKIE_DOMAINマシンのIPとなしの両方の設定を試しました。(CookieドメインがマシンのIPとしてChromeで表示されることを確認しました)

また、ユーザーがシェルを介して認証することを確認しました。

>>> 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とChromeCanaryを使用してログインしようとすると、どちらもログイン画面に同じように戻ります。

他に足りないものはありますか????

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

'django.contrib.sessions.backends.db'問題を解決したSESSION_ENGINEを変更しました。

4

23 に答える 23

64

デバッグする手順:

  • データベースが同期されていることを確認してください
    • django_session テーブルがあることを再確認してください
  • 認証してみる
    • django_sessionテーブルにレコードが作成されていますか?

そうでない場合

  • 非標準設定を削除する
    • AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
    • SESSION_EXPIRE_AT_BROWSER_CLOSE = True
    • SESSION_SAVE_EVERY_REQUEST = True
    • SESSION_COOKIE_AGE = 86400 # 秒
    • SESSION_COOKIE_DOMAIN = なし
    • SESSION_COOKIE_NAME = 'DSESSIONID'
    • SESSION_COOKIE_SECURE = False
  • データベースが同期されていることを確認してください
    • django_sessionテーブルがあることを再確認してください
  • 認証してみる
    • django_sessionテーブルにレコードが作成されていますか?

これにより有用なデバッグが発生する場合はお知らせください。

サンプル設定ファイル: https://github.com/fyaconiello/Django-Blank-Bare-Bones-CMS/blob/master/dbbbcms/settings.py

于 2012-08-24T13:39:20.317 に答える
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する必要がありますTrue

于 2012-08-23T09:40:09.797 に答える
3

私たちのアプリでも同様の問題がありましたが、これらが役立つかもしれません:

  1. cleanup コマンドを使用して、古いセッションを django_sessions からクリアします

  2. firefox(firebug) または chrome 開発者ツールで Cookie のサイズを確認してください。管理者 (django.contrib.messages.middleware.MessageMiddleware) ではデフォルトでメッセージングが有効になっているため、複数の編集と削除により Cookie のサイズが 4096 バイトを超えることがあります。簡単なテストの 1 つは、「メッセージ」Cookie を削除し、その後ログインできるかどうかを確認することです。

そして、これとApacheのその他のメモリ関連の問題のために、実際にはnginx / uwsgiルートに切り替えることになりました。それ以来、これがnginxで繰り返されるのを見たことはありません。

于 2012-08-28T08:36:38.150 に答える
3

管理者パスワードが settings.py ファイルに保存されているとは思えません。これは、最初に syncdb を実行したときに作成されます。スーパーユーザーの作成をスキップしたか、タイプミスをしただけだと思います。プロジェクトのルートでターミナルで実行してみてください。

python django-admin.py createsuperuser

これにより、管理者ログインを再入力できるようになります。こちらもご覧ください https://docs.djangoproject.com/en/dev/ref/django-admin/

于 2012-08-12T02:48:41.597 に答える
2

投稿後にリダイレクトされ、すぐにシステムがログインしたことを忘れてしまうため、セッションの問題のように聞こえます。

以下を試してください:

  1. セッションのバックエンドが機能していることを確認してください。
  2. db キャッシュ バックエンドを使用してトランザクション ミドルウェアが混乱しているかどうかを確認する場合は、キャッシュ バックエンドと交換してください。
  3. データベースバックエンドを試して、データベーステーブルにセッションが保存されているかどうかを確認してください
于 2012-08-23T09:34:54.457 に答える
2

でユーザーを作成してみましたか:

python manage.py createsuperuser

テストマシンでデータベースを作成し、それを展開サーバーに移行すると、同じ問題が発生します...

于 2012-08-25T08:38:45.793 に答える
1

site作業するものが少なくとも 1 つあることを確認してください。

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

ここに 0 が表示されている場合は、作成してください。

于 2012-08-27T11:16:22.533 に答える
1

正確にはわかりませんが、具体的には次の 2 行の URL 構成に問題がある可能性があります。

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

ずっと前に、単一の URL 構成が管理 URL の一部を上書きしたため、Django プロジェクトの管理を参照する際に問題が発生しました。管理 URL の一部でもある要素を含むカスタム URL 構成を指定すると、Django はそれを好まないようです。あなたの場合、アプリdjango.contrib.sitesで有効にしていますsettings.py。にアクセスすると、このアプリの管理パネルにアクセスできますhttp://127.0.0.1:8000/admin/sites/r'^sites/'その中の URL 構成が管理 URL の一部をオーバーライドしている可能性があります。この特定の URL 構成の名前を変更するか、テスト目的で無効django.contrib.sitesにしてください。INSTALLED_APPS

これは単なる仮定であることに注意してください。私が知っているのは、Django の管理パネルは、独自の URL のような類似した名前を使用する URL 構成について少しうるさいということだけです。現時点では自分でテストすることはできません。しかし、これで少しは助かるかもしれません。

于 2012-08-22T17:23:43.600 に答える
1

このトピックに関する他の記事を確認すると、sys.path に関連している可能性があります。開発サーバーの実行時と WSGI の実行時に sys.path を確認して比較できますか。

詳細については、この記事とその記事をご覧ください。ただし、この記事の詳細に入る前に、まず sys.path を確認します。

于 2012-08-23T09:57:52.090 に答える
0

免責事項: まだコメントを追加できないため、解決策を提案しながらここで説明を求めなければなりません。そのために残念。

ログイン直後にログアウトしていませんか?この問題のようなもの

さまざまな方法で確認できます。ログアウト シグナルにフックを追加することをお勧めします (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)

次に、ログインして、コンソールにメッセージが表示されるかどうかを確認してください。表示された場合は、ログイン後にログアウトを呼び出すリダイレクトまたはカスタマイズされたテンプレートがあるかどうかを確認する必要があります。問題を見つけるのに役立つことを願っています。

于 2012-08-22T15:46:58.270 に答える