Django Rest Framework Oauth2令牌

时间:2016-01-12 02:28:59

标签: django django-rest-framework oauth2

我正在关注这个教程https://yeti.co/blog/oauth2-with-django-rest-framework/,但后来遇到了一个问题。我可以注册一个新用户,但是当我尝试使用以下格式获取令牌时:

curl -X POST -d "grant_type=password&username=<user_name>&password=<password>" http://<client_id>:<client_secret>@localhost:8000/o/token/

如果出现credential错误,我会收到错误消息。但是,如果我使用the admin page创建了一个新用户,我将能够获得该令牌。我的猜测是,在sign_up视图中,密码不是hashed,因此存在一些错误,但我不知道如何更改密码。

serializers.py文件:

from rest_framework import serializers
from django.contrib.auth.models import User

class SignUpSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')
        write_only_fields = ('password',)

views.py文件:

from rest_framework import generics
from permissions import IsAuthenticatedOrCreate
from django.contrib.auth.models import User
from users.serializers import SignUpSerializer

class SignUp(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = SignUpSerializer
    permission_classes = (IsAuthenticatedOrCreate,)

1 个答案:

答案 0 :(得分:0)

您提出的卷曲不起作用,因为格式无效。通过键入http://<client_id>:<client_secret>@localhost,您误解了oAuth2的概念,并且认为<client_id>:<client_secret>机器中的localhost是有效用户。但是,客户端ID和密码是指已注册的客户端应用程序。

请改用此格式:

curl -X POST -d "grant_type=password&username=<user_name>&password=<password>" -u"<client_id>:<client_secret>" http://localhost:8000/o/token/