нужен пример авторизации с помощью django-tastypie

Я относительно новичок в Django и его экосистеме. Я пишу REST API для нашего мобильного клиента, используя django-tastypie. Я просмотрел почти все примеры в Интернете о том, как использовать deliciouspie для создания интерфейсов REST. но ни один из них не относится к POST-сообщению данных от клиента и к тому, как вы авторизуете клиента.

Я использовал from deliciouspie.authentication.BasicAuthentication, как показано в примере. Он открывает всплывающее окно с запросом имени пользователя и пароля и отлично работает в браузере. Но я не уверен, будет ли это делать то же самое на мобильных устройствах (точнее, в родном приложении для iOS). Я не совсем понимаю, когда пользователь сделает запрос на вход в систему, как это всплывающее окно будет отображаться там на его/ее мобильном устройстве, если он или она использует не браузер, а родное приложение.

Я полностью потерян в этом, я был бы очень признателен за вашу помощь.


person sanket    schedule 31.08.2011    source источник
comment
На самом деле это менее специфично для джанго и вкусного пирога. Вы должны проверить, поддерживает ли ваша библиотека, с которой вы выполняете POST-запросы, заполнение имени пользователя/пароля по запросу.   -  person Torsten Engelbrecht    schedule 31.08.2011
comment
Вопрос касается АУТЕНТИФИКАЦИИ, а не АВТОРИЗАЦИИ.   -  person Yefei    schedule 04.11.2016


Ответы (2)


Вы можете проверить источник и использовать, например, ApiKeyAuthentication. Вам просто нужно POST имя пользователя и ключ API для аутентификации пользователя.

Это похоже на использование для приложения ios. Вот часть кода проверки.

def is_authenticated(self, request, **kwargs):
    """
    Finds the user and checks their API key.

    Should return either ``True`` if allowed, ``False`` if not or an
    ``HttpResponse`` if you need something custom.
    """
    from django.contrib.auth.models import User

    username = request.GET.get('username') or request.POST.get('username')
    api_key = request.GET.get('api_key') or request.POST.get('api_key')

    if not username or not api_key:
        return self._unauthorized()

    try:
        user = User.objects.get(username=username)
    except (User.DoesNotExist, User.MultipleObjectsReturned):
        return self._unauthorized()

    request.user = user
    return self.get_key(user, api_key)

https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authentication.py#L128 https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authorization.py#L42

person Yuri Kriachko    schedule 13.01.2012

Спасибо за помощь.

Я использовал аналогичный подход, упомянутый @Iurii. Вот мое решение.

Я написал класс для обработки аутентификации и переопределения метода is_authenticated. и затем я могу использовать этот класс в мета-определении классов ресурсов deliciouspie.


    from tastypie.authentication import BasicAuthentication
    from tastypie.resources import Resource, ModelResource

    # class for handling authentication
    class MyAuthentication(BasicAuthentication):
        def is_authenticated(self, request, **kwargs):
            # put here the logic to check username and password from request object
            # if the user is authenticated then return True otherwise return False

    # tastypie resource class
    class MyResource(ModelResource):
        class Meta:
            authentication = MyAuthentication()

это гарантирует, что запрос на доступ к ресурсу будет проходить через ваш код аутентификации.

person sanket    schedule 16.02.2012
comment
не могли бы вы прикрепить эти примеры кодов для комментариев ниже 1. поместите здесь логику для проверки имени пользователя и пароля из объекта запроса, если пользователь аутентифицирован, затем верните True, иначе верните False - person sumit; 10.05.2012
comment
@ timus2001 конечно, вот одно из возможных решений. Пример кода - person sanket; 21.05.2012