2012-01-13 11 views
12

管理ページでdjangoプロジェクトをセットアップしました。開発の最初の数週間は完璧に動作し、しばらく管理ページを使用していなかったので、私が戻ってきたときに管理ページが破損しました。私はDBをチェックしましたdjangoの管理ページが壊れています

Please enter a correct username and password. Note that both fields are case-sensitive. 

::。どんなに私が何をすべきか、それは私には、ユーザー名を入力した後

にログインすることができませんし、PW、管理ページが常に言うスーパーユーザが存在し、 is_active、is_superuser、およびis_staffがすべてTrueです。シェルを使ってパスワードが正しいことを確認しました。私は間違いがないことを確認するために、データベースを複数回フラッシュ、削除、再作成しました。また、ミドルウェア、URL、INSTALLED_APPSなどを二重チェックして、すべて正しく設定されていることを確認しました。

私の知る限り、管理ページは、彼らが誰がログインさせないことを除いて完璧に動作。

どれでもここで何が起こっているかのアイデア、あるいはデバッグしようとする他の方法?私はこのバグに本当に困惑しています。

PS:私はDBマイグレーションのためにサウス、FBログインのためのdjango-social-auth、プロダクションと開発のためのlocal_settings.pyを別々に使用しています。そこにいる)

+0

auth.views.login()ビューを使用して独自のログインページを作成するとどうなりますか? – JeffS

+0

「あなたのユーザー名とパスワードが一致しませんでした。もう一度やり直してください。 – Abe

+0

FBログインのdjango-social-authを利用するには、システムがauthenticate()とlogin()を実行する方法を変更する可能性のあるコードを修正しましたか?また、開発期間中、settings.pyのSECRET_KEY = '...'が変更されたなど、プロジェクトを削除して再作成しましたか?私はこの鍵がパスワードを解読するのに使われていると思っていますが、私は肯定的ではありません。 – Furbeenator

答えて

14

この問題は認証バックエンドに関連している可能性があります。 設定ファイルでAUTHENTICATION_BACKENDSパラメータを確認してください。あなたは、次の操作を行うことができ Official Django Documentation

+0

Bingo。これが問題でした.- django-social-authを追加したときには、django.contrib.auth.backends.ModelBackendを含む認証バックエンドの全リストが含まれていました。私は、私がそれをコメントしていたことに気づかずに、私が使用する予定のないすべての行をコメントアウトしました。 – Abe

1

これを試してみてください。 tests.py:

from django.contrib import auth 

class AuthTestCase(TestCase): 
    def setUp(self): 
     self.u = User.objects.create_user('[email protected]', '[email protected]', 'pass') 
     self.u.is_staff = True 
     self.u.is_superuser = True 
     self.u.is_active = True 
     self.u.save() 

    def testLogin(self): 
     self.client.login(username='[email protected]', password='pass') 

次に、python manage.py test <your_app_name>.AuthTestCaseでテストを実行します。これが合格すると、システムは動作しています。ユーザ名とパスワードを確認して、受け入れ可能かどうか確認してください。

+1

テストは機能します - OKを返します。しかし、サイトのログインはまだ動作しません。私はcheck_passwordを使ってシェルのパスワードをチェックし、Trueを返します。私はスーパーユーザー名の代わりに自分のメールアドレスを入力すると、「あなたのメールアドレスはあなたのユーザー名ではありません。だからDBのレコードにはっきりとアクセスできます。ログインすることはできません。 – Abe

0

AUTHENTICATION_BACKENDS = (
    ('django.contrib.auth.backends.ModelBackend'), 
) 

詳細情報::

は、次の値を試してみてください

  • あなたのmysql(または他のデータベースコンソール)
  • を入力します。 YourDATABASEを使用します。
  • SELECT * from auth_user;
  • watch is_staffとis_superuser項目
  • UPDATE auth_user SET is_staff = "1"ここでusername = "root";

もう一度ログインできます。

0

私は同じ問題がありましたが、設定ファイルのAUTHENTICATION_BACKENDSフラグが問題ではありませんでした。 Django Rest Frameworkを使用すると、set_passwordを呼び出さずにパスワードを変更してしまったため、パスワードのハッシュをバイパスしていました。そのため、無効なログインが表示されていました。

私は同様の試験により、ユーザーの作成をテストするために、簡単なテストを実行することによって、問題を検出することができた:

from django.test import TestCase 

from django.contrib import auth 
from .models import * 

class AuthTestCase(TestCase): 
    def setUp(self): 
     self.u = UserProfile.objects.create_user('[email protected]', 'iamtest', 'pass') 
     self.u.is_staff = True 
     self.u.is_superuser = True 
     self.u.is_active = True 
     self.u.save() 

    def testLogin(self): 
     self.client.login(username='[email protected]', password='pass') 

私がのUserProfile

という名前のカスタムユーザーを作成していたことも言及する価値があります
関連する問題