2016-12-23 1 views
0

Je ne comprends pas vraiment pourquoi je ne peux pas me connecter en tant qu'utilisateur que j'ai créé en utilisant Django REST Framework. J'utilise le modèle utilisateur from django.contrib.auth.models import User. Je fais tourner le serveur localement, et je peux me connecter avec un super-utilisateur que j'ai créé et accéder aux données que je veux, mais j'ai créé l'API de sorte que je puisse créer des utilisateurs via l'API navigable, et je souhaite pour se connecter avec l'un de ces utilisateurs. Cependant je ne suis pas capable de.Django REST Framework Connexion

Des suggestions? Pour l'image ci-dessous, je ne serais pas capable de me connecter en utilisant le nom d'utilisateur 'test' et le mot de passe 'test123'.

Ceci est l'erreur lors de la tentative de connexion. Veuillez entrer un nom d'utilisateur et un mot de passe corrects. Noter que les deux champs peuvent être sensibles à la casse.

enter image description here

sérialiseur

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') 

VIEW

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

Y a-t-il une erreur? –

+0

Veuillez entrer un nom d'utilisateur et un mot de passe. Noter que les deux champs peuvent être sensibles à la casse. –

+0

Utilisez-vous un modèle 'User' personnalisé? –

Répondre

1

L'image que vous avez affichée affiche une liste de vos utilisateurs, non? Je me demande pourquoi le mot de passe est affiché en clair. Normalement, Django ne stocke pas les mots de passe eux-mêmes mais les hachages. Alors peut-être que c'est le problème? Avez-vous utilisé la fonction set_password du modèle utilisateur lors de la création de l'utilisateur?

+0

Je ne l'ai pas fait, mais j'étais encore capable de créer ces enregistrements. Le seul utilisateur que j'ai créé en utilisant la commande 'python create superuser' possède en fait un grand mot de passe haché. Ils ont été créés à l'aide de l'interface graphique Web et d'une requête Web vers 127.0.0.1/users/ avec json pour un utilisateur. –

+0

Rest Framework ne "traduit" pas les mots de passe en hashes requis. Vous devez le faire vous-même. Écrivez votre propre gestionnaire POST et utilisez le mot de passe set du modèle USER (comme expliqué par Md. Al-Amin). Vous pouvez trouver ceci utile: http://www.django-rest-framework.org/tutorial/3-class-based-views/ – crystalAhmet

+0

Même si je traduis les mots de passe, et les stocke comme des hashes, pourquoi serait-ce travail? Ils sont stockés en texte brut. –

0

Assurez-vous d'enregistrer le mot de passe correctement. Mot de passe du magasin Django comme hash pas au format texte brut.

Exemple: création d'un nouvel utilisateur.

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

Je ne fais rien de tout cela, je pense qu'il peut être géré par le Django Rest Framework. J'ai posté le View/Serializer que j'utilise. Tous les utilisateurs que j'ai créés via l'interface graphique Web ou via Postman en utilisant l'URL 127.0.0.01/users/ –