web-dev-qa-db-ja.com

有効なユーザー名とパスワードでDjango adminページにログインできません

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

この質問は Django FAQ にありますが、私はそこで答えを調べましたが、まだ最初のログイン画面を通過できません。

Apache2とmodwsgiを使用するubuntu 12.04でDjango 1.4を使用しています。

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

SESSION_COOKIE_DOMAINをマシンのIPとNoneの両方に設定しようとしました。 (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 [email protected]
        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 [email protected]
        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 [〜#〜]

runserver経由で開発サーバーを使用する場合、管理ページは続行するため、wsgi/Apacheの問題のようです。まだそれを理解していません。

[〜#〜] solution [〜#〜]

問題は、SESSION_ENGINE値が'Django.contrib.sessions.backends.cache'に設定されているCACHE_BACKENDwithoutが適切に構成されていることです。

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

40
monkut

デバッグ手順:

  • データベースが同期されていることを確認してください
    • 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

49
>>> 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_activeTrueでなければなりません

11
Burhan Khalid

アプリにも同様の問題があり、これらが役立つ可能性があります。

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

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

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

3
Raj J

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

python Django-admin.py createsuperuser

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

3
Kei Nagase

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

python manage.py createsuperuser

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

2
Lapin-Blanc

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

以下を試してください:

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

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

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

1
schacki

次のエントリを持つデータベースユーザーテーブルが正しいことを確認します。

is_staff  => True  (if exit).
is_active  => True .
is_superuser => True.
1

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

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

ここに0が表示されたら、作成してください。

1
Alexey Kachayev

この問題がありました。問題は、本番環境で2つの変数をTrueに設定して、httpsを使用してサイトに接続できるようにしたことです。

SESSION_COOKIE_SECUREおよびCSRF_COOKIE_SECUREは、localhost httpで開発している場合はFalseに設定する必要があります。これら2つの変数をFalseに変更すると、ローカルで開発するときに管理サイトにサインインできました。

1
Marquistador

免責事項:まだコメントを追加できませんので、ここで解決策を提案すると同時に説明をお願いする必要があります。そのために残念。

ユーザーはログイン直後にログアウトしましたか? この問題 のようなもの

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

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

0
furins

自分でログインできなかった後、上記のコメントで、非標準の設定の削除について言及した人を見ました。

これをローカル設定に追加すると解決しました

SESSION_COOKIE_SECURE = False

0

私は同じ問題を抱えていましたが、サーバーを再起動すると解決しました:

systemctl restart nginx
0
lapin

ログインしようとすると、最終的にソケットが強制終了される前にページがハングするという関連の問題がありました。実際にログインしていたことが判明しましたが、ログインシグナルプロセッサの1つがフリーズしていました。

RabbitMQサーバーが起動できなかったため、Celeryは非同期タスクをRabbitMQに渡すことができませんでした。

0
kokociel

私にとっては、Firefoxの管理ページにはログインできませんでしたが、Chromeにはログインできました。問題は、settings.pyでCSRF_COOKIE_PATHが設定されていたことです。絶対に使用しないでください。 Django 1.8では正常に動作しません。

0
max

作成したユーザーにIs_staff = Trueのフラグが付けられていることを確認できます。ユーザーがDjango admin

0
Timothy