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 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>
[〜#〜] update [〜#〜]
runserver
経由で開発サーバーを使用する場合、管理ページは続行するため、wsgi/Apacheの問題のようです。まだそれを理解していません。
[〜#〜] solution [〜#〜]
問題は、SESSION_ENGINE
値が'Django.contrib.sessions.backends.cache'
に設定されているCACHE_BACKEND
withoutが適切に構成されていることです。
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
>>> 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
でなければなりません
アプリにも同様の問題があり、これらが役立つ可能性があります。
Cleanupコマンドを使用して、Django_sessionsから古いセッションをクリアします
Firefox(firebug)またはchrome開発者ツールでcookieサイズを確認してください。admin(Django.contrib.messages.middleware.MessageMiddleware)でデフォルトでメッセージングが有効になっているため、cookieサイズが複数の編集および削除を伴う4096バイト:1つの簡単なテストは、「メッセージ」Cookieを削除し、その後ログインできるかどうかを確認することです。
そして、Apacheのこの問題やその他のメモリ関連の問題のために、実際にはnginx/uwsgiルートに切り替えました。それ以来、nginxでこれが繰り返されるのを見ていない。
管理者パスワードがsettings.pyファイルに保存されているとは思わない。最初にsyncdbを作成したときに作成されます。スーパーユーザーの作成をスキップしたか、単にタイプミスをしたと考えています。プロジェクトルートのターミナルで実行してみてください。
python Django-admin.py createsuperuser
これにより、管理者ログインを再入力できます。こちらもご覧ください https://docs.djangoproject.com/en/dev/ref/Django-admin/
ユーザーを作成して試してみましたか:
python manage.py createsuperuser
テストマシンでdbを作成し、それを展開サーバーに移行すると、同じ問題が発生します...
セッションの問題のように聞こえます。投稿後にリダイレクトされ、すぐにシステムがログインしたことを忘れてしまったためです。
以下を試してください:
次のエントリを持つデータベースユーザーテーブルが正しいことを確認します。
is_staff => True (if exit).
is_active => True .
is_superuser => True.
少なくとも1つのsite
があることを確認してください。
>>> from Django.contrib.sites.models import Site
>>> Site.objects.count()
(0.048) SELECT COUNT(*) FROM `Django_site`; args=()
1
ここに0が表示されたら、作成してください。
この問題がありました。問題は、本番環境で2つの変数をTrue
に設定して、httpsを使用してサイトに接続できるようにしたことです。
SESSION_COOKIE_SECURE
およびCSRF_COOKIE_SECURE
は、localhost httpで開発している場合はFalse
に設定する必要があります。これら2つの変数をFalse
に変更すると、ローカルで開発するときに管理サイトにサインインできました。
免責事項:まだコメントを追加できませんので、ここで解決策を提案すると同時に説明をお願いする必要があります。そのために残念。
ユーザーはログイン直後にログアウトしましたか? この問題 のようなもの
これはさまざまな方法で確認できますが、ログアウト信号にフックを追加することをお勧めします(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)
ログインして、コンソールにメッセージが表示されるかどうかを確認してください。表示された場合、ログイン後にログアウトを呼び出すリダイレクトまたはカスタマイズされたテンプレートがあるかどうかを確認する必要があります。問題の発見に役立てば幸いです。
自分でログインできなかった後、上記のコメントで、非標準の設定の削除について言及した人を見ました。
これをローカル設定に追加すると解決しました
SESSION_COOKIE_SECURE = False
私は同じ問題を抱えていましたが、サーバーを再起動すると解決しました:
systemctl restart nginx
ログインしようとすると、最終的にソケットが強制終了される前にページがハングするという関連の問題がありました。実際にログインしていたことが判明しましたが、ログインシグナルプロセッサの1つがフリーズしていました。
RabbitMQサーバーが起動できなかったため、Celeryは非同期タスクをRabbitMQに渡すことができませんでした。
私にとっては、Firefoxの管理ページにはログインできませんでしたが、Chromeにはログインできました。問題は、settings.pyでCSRF_COOKIE_PATHが設定されていたことです。絶対に使用しないでください。 Django 1.8では正常に動作しません。
作成したユーザーにIs_staff = Trueのフラグが付けられていることを確認できます。ユーザーがDjango admin