2016-09-06 2 views
0

Я стараюсь понять, что 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) 

ответ

0

Возможно, вопрос вы должны спрашивать будет просто зашифрованные куки не хватает, который вы передаете серверу при попытке доступа к защищенным URL-адресам/ресурсам. Теперь, если вы хотите по-прежнему выдавать токен, то после входа в систему запустите код для ответа с помощью токена в заголовке или в полезной нагрузке ответа. После того, как токен есть, вы передаете токен в заголовке http в качестве Авторизация: Носитель на сервер ресурсов, который обрабатывает токен и предоставляет доступ.

+0

так после 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

Смежные вопросы