Я стараюсь понять, что oAuth2 реализует в моем REST API. Я использую DRF в своем backend и отвечаю за родной язык для создания мобильного приложения. Я могу создать регистрацию пользователя и войти в DRF, но когда и где я должен создать токен. Должен ли я создавать токен, когда пользователь регистрируется или когда пользователь входит в систему? Я могу получить отрицательное голосование, но я знаю, что какой-то эксперт просветит меня.Когда должен быть создан токен с использованием oAuth
У нас есть мобильное приложение, называемое 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)
так после new_data = serializer.data в UserLoginAPI, я должен это сделать, если new_data: \t \t expire_seconds = oauth2_settings.user_settings [ 'ACCESS_TOKEN_EXPIRE_SECONDS'] \t \t оптические прицелы = oauth2_settings.user_settings [ 'SCOPES'] \t \t применение = Application.objects.get (имя = "Гурман") \t \t истекает = DateTime.Now() + timedelta (секунды) = expire_seconds \t \t access_token = AccessToken.objects.create (пользователь = new_data, \t \t \t \t \t \t \t \t \t \t \t \t применение = применение, \t \t \t \t \t \t \t \t \t \t \t \t маркер = generate_token(), \t \t \t \t \t \t \t \t\t \t \t истекает = истекает, \t \t \t \t \t \t \t \t \t \t \t \t объем = Скоупс) \t \t, если access_token: или что? – Serenity