我正在关注这个教程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,)
答案 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/