2016-12-23 24 views
0

Django REST Frameworkを使用して作成したユーザーとしてログインできない理由を理解できません。私はユーザモデルfrom django.contrib.auth.models import Userを使用しています。Django REST Frameworkログイン

サーバーをローカルにスピンアップしていて、自分が作成してアクセスするスーパーユーザーでログインできますが、ブラウザー可能なAPIを使用してユーザーを作成できるようにAPIを作成していますそれらのユーザーの1人でログインします。しかし、私はできません。

提案がありますか?下の画像では、「test」ユーザー名と「test123」パスワードを使用してログインすることはできません。

これは、ログインしようとしたときのエラーです。正しいユーザー名とパスワードを入力してください。両方のフィールドで大文字と小文字が区別されることに注意してください。

enter image description here

シリアライザ

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    ideas = serializers.HyperlinkedRelatedField(many=True, view_name='idea-detail', read_only=True, allow_null=True) 
    ideacomments = serializers.HyperlinkedRelatedField(many=True, view_name='ideacomment-detail', read_only=True, 
                 allow_null=True) 

    class Meta: 
     model = User 
     fields = ('url', 'id', 'username', 'password', 'email', 
        'first_name', 'last_name', 
        'date_joined', 'ideas', 'ideacomments') 

あなたが投稿した画像は、右、あなたのユーザーのリストを示し

class UserViewSet(MultipleFieldLookupMixin, viewsets.ModelViewSet): 
    """ 
    This viewset automatically provides `list` and `detail` actions. 
    """ 
    queryset = User.objects.all() 
+0

エラーが発生しましたか? –

+0

正しいユーザー名とパスワードを入力してください。両方のフィールドで大文字と小文字が区別されることに注意してください。 –

+0

カスタム 'User'モデルを使用していますか? –

答えて

1

VIEW? 私はなぜパスワードが明確に表示されるのだろうかと思います。通常、Djangoはパスワード自体を保存するのではなく、ハッシュを保存します。 それはおそらく問題ですか? ユーザー作成時にユーザーモデルのset_password関数を使用しましたか?

+0

私はしませんでしたが、私はまだこれらのレコードを作成することができました。 'python create superuser'コマンドを使用して作成した1人のユーザーは、実際には大きなハッシュパスワードを持っています。これらはWeb GUIを使用して作成され、127.0.0.1/users/にjsonを使用してユーザーにWebリクエストを送信します。 –

+0

Rest Frameworkは、パスワードを必要なハッシュに "変換"しません。あなたはそれを自分でやる必要があります。 独自のPOSTハンドラを作成し、USERモデルのset_passwordを使用します(Md。Al-Aminの説明と同様)。 これは役に立ちます: http://www.django-rest-framework.org/tutorial/3-class-based-views/ – crystalAhmet

+0

私がパスワードを翻訳してハッシュとして保存しても、それはなぜでしょう?作業?彼らはプレーンテキストとして保存されています。 –

0

パスワードを正しく保存してください。 Djangoはプレーンテキスト形式ではないハッシュパスワードを格納します。

例:新しいユーザーを作成します。

user = User.objects.create(username='testuser') 
user.set_password('testpass') 
user.save() 
+0

私はそれをしません、私はそれがDjango Rest Frameworkによって扱われるかもしれないと思います。私は使用しているビュー/シリアライザを投稿しました。 Web GUIを通じて作成したすべてのユーザー、またはURL 127.0.0.01/users/を使用して郵便番号を使用して作成したユーザー –

関連する問題