【发布时间】:2017-01-13 23:16:58
【问题描述】:
我正在努力理解 oAuth2 以在我的 REST API 中实现。我在我的后端使用 DRF 并响应原生来构建移动应用程序。我可以在 DRF 中创建用户注册和登录,但我应该在何时何地实际创建一个令牌。我必须在用户注册或用户登录时创建令牌吗?我可能会得到反对票,但我知道一些专家会启发我。
用例是我有一个名为 foodie 的移动应用程序,用户可以在其中创建他们的帐户并登录。用户也可以从网络登录和创建帐户。
我应该在我的代码中实际在哪里实现 oAuth 令牌?
serializers.py
class UserCreateSerializer(ModelSerializer):
class Meta:
model = User
fields = [
'username',
'email',
'first_name',
'last_name',
'password',
'confirm_password'
]
extra_kwargs = {"password": {"write_only": True}}
def create(self, validated_data):
username = validated_data['username']
first_name = validated_data['first_name']
last_name = validated_data['last_name']
email = validated_data['email']
password = validated_data['password']
confirm_password = validated_data['password']
user_obj = User(
username = username,
first_name = first_name,
last_name = last_name,
email = email
)
user_obj.set_password(password)
user_obj.save()
return validated_data
class UserLoginSerializer(ModelSerializer):
# token = CharField(allow_blank=True, read_only=True)
username = CharField()
class Meta:
model = User
fields = [
'username',
'password',
# 'token',
]
extra_kwargs = {"password":{"write_only": True}}
def validate(self, data):
return data
views.py
class UserCreateAPI(CreateAPIView):
serializer_class = UserCreateSerializer
queryset = User.objects.all()
permission_classes = [AllowAny]
class UserLoginAPI(APIView):
permission_classes = [AllowAny]
serializer_class = UserLoginSerializer
def post(self, request, *args, **kwargs):
# access_token = AccessToken.objects.get(token=request.data.get('token'), expires__gt=timezone.now())
data = request.data
serializer = UserLoginSerializer(data=data)
if serializer.is_valid(raise_exception=True):
new_data = serializer.data
return Response(new_data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
标签: python django python-3.x oauth django-rest-framework