0

私はDjango Rest Frameworkでトークン認証を設定しようとしています。私は現在、ユーザーのために返されたトークンを取得できるかどうかを確認するためにいくつかのテストを書いています。以下は単体テスト(テストケースの内部にある)のコードです。Django Rest Frameworkでクレデンシャルが正しくありませんか?

def test_create_valid_request(self): 
    u = User.objects.create(username='test1', password='thisis8chars') 
    Token.objects.create(user=u) 

    # these assertions all pass 
    self.assertEqual(User.objects.get(username='test1'), u) 
    self.assertEqual(u.username, 'test1') 
    self.assertEqual(u.password, 'thisis8chars') 

    data = {'username': 'test1', 'password': 'thisis8chars'} 
    url = "/api-token-auth/" 

    response = self.client.post(url, data, format="json") 
    print response.status_code 
    print response.content 

この版画:

400 
{"non_field_errors":["Unable to log in with provided credentials."]} 

私は私の資格情報を使用して何か問題がなければならないことを理解し、私はそれを見ることはできません。私は、ユーザーを作成し、その属性をテストし、トークンを取得するためのポストリクエストを作成します。私はhttpieでDjango開発サーバー上でこれを手動でテストし、動作してトークンを返します。どのような問題が起こる可能性がありますか?これは私のテスト設定に問題がありますか?もしそうなら、何?

必要に応じて、より多くのコードを投稿/記述することができます。

おかげ

答えて

0

わかりましたので、エラーは非常に簡単だった:私はUser.objects.create_userではなくUser.objects.createを望んでいました。

上記のコードで使用しようとしていたパスワードは、ハッシュ化されていないか、塩漬けされていないため、Djangoはプレーンテキストのパスワードを保存または送信しないため問題がありました。悪質な資格情報エラーです。

0

すでに述べたように、User.objects.create_userを使用する必要があります。

これを追加するには、既にUserオブジェクトがインスタンス化されており、パスワードを変更する場合は、user.set_password(raw_password)メソッドを呼び出す必要があります。

関連する問題