Заставить Twitter, Tastypie, Django, XAuth и iOS работать для создания прав доступа на основе Django - PullRequest
19 голосов
/ 29 сентября 2011

Я создам приложение для iOS, функциональность которого будет основываться на разрешениях доступа, предоставляемых приложением Django REST.

Django управляет разрешениями для действий в приложении iOS.Пользователь А может выполнять Работу А, если ему разрешено.Разрешения будут запрашиваться через ASIHTTPRequest к REST API, обслуживаемому Django Tastypie.

Нет регистрации.Пользователи просто смогут войти через Twitter.XAuth будет использоваться для представления экрана входа для пользователей.

Существует 2 типа пользователей.Например, будут Тип 1 и Тип 2. Тип 1 будет обычным пользователем, который может просматривать данные только в приложении iOS.

Пользователь типа 2 может отправлять / редактировать данные.

Это теоретически.Однако ... я не знаю с чего начать !!

Самый большой контрольно-пропускной пункт:

Как я могу подключить Twitter XAuth к пользовательскому бэкэнду Django через Tastypie?

ЕслиЯ знаю это, тогда я могу запросить необходимые разрешения.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 10 ноября 2012

Я сделал нечто похожее с django + tastypie и входом в Facebook для iOS.

Аутентификация

  1. Войдите в систему любым доступным способом, получите access_token .

  2. Создайте конечную точку вкусного запроса GET, в которую вы передадите маркер доступа в виде строки запроса .

  3. На стороне сервера проверьте и т. Д., А затем создайте свой собственный внутренний токен «tastypie» и верните его в ответ на запрос get, например:

class GetToken(ModelResource):
    """
    Authenticates the user via facebook and returns an APIToken for them.
    """</p>

<pre><code>class Meta(object):
    queryset = ApiKey.objects.all()
    resource_name = 'authenticate'
    fields = ['user', 'key']
    allowed_methods = ['get']
    authorization = Authorization()
    authentication = FacebookAuthentication()

def prepend_urls(self):
    """We override this to change default behavior
    for the API when using GET to actually "create" a resource,
    in this case a new session/token."""

    return [
        url(r"^(?P<resource_name>%s)%s$" % (self._meta.resource_name, trailing_slash()),
            self.wrap_view('_create_token'), name="api_get_token"),
        ]

def _create_token(self, request, **kwargs):
    """Validate using FacebookAuthentication, and create Api Token if authenticated"""
    self.method_check(request, allowed=['get'])
    # This checks that the user is authenticated on facebook and also creates the user
    # if they have not been created.
    self.is_authenticated(request)
    self.throttle_check(request)

    bundle = self.build_bundle(obj=None, request=request)
    bundle = self.obj_create(bundle, request, **kwargs)
    bundle = self.full_dehydrate(bundle)

    self.log_throttled_access(request)
    return self.create_response(request, bundle.data)


def obj_create(self, bundle, request=None, **kwargs):
    """Create a new token for the session"""
    bundle.obj, created = ApiKey.objects.get_or_create(user=request.user)
    return bundle

  1. Передать возвращенный ключ API на все последующие вызовы. Может быть либо снова в качестве параметра строки запроса, либо я установил его в заголовке авторизации для каждого вызова.

  2. Убедитесь, что ALL для других ресурсов, для которых вы хотите выполнить аутентификацию, в Meta установлено ApiKeyAuthentication().

<code>class ThingResource(ModelResource):
    class Meta:
        queryset = Thing.objects.all()
        resource_name = 'thing'
        authentication = ApiKeyAuthentication()

Авторизация

Итак, теперь на стороне сервера вы знаете, что пользователь - это тот, о ком говорят, что ему разрешено делать? Вот что такое мета авторизации.

Вы, вероятно, хотите Авторизация Django , в этом случае вы можете просто использовать обычные схемы разрешений для пользователей, или вы можете свернуть свои собственные. Это довольно просто.

0 голосов
/ 22 июня 2012

amrox имеет хороший пример о том, как подключить пользовательский форк django-oauth-plus , который поддерживает xAuth, в вкусный пирог.Я полагаю, что его можно настроить в соответствии с вашими целями.

...