нужен пример выполнения авторизации с использованием django-tastypie - PullRequest
8 голосов
/ 31 августа 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Вы можете проверить источник и использовать, например, 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

0 голосов
/ 16 февраля 2012

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

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

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


    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()

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

...