Использование Twitter, Tastypie, Django, XAuth и iOS для создания разрешений доступа на основе Django

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

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

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

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

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

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

Самый большой блокпост:

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

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

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


person yretuta    schedule 29.09.2011    source источник
comment
когда пользователь входит в приложение iOS, он также автоматически входит в ваше веб-приложение. правильно? а потом вот как узнать, кто что может сделать. или я неправильно понимаю вопрос?   -  person akonsu    schedule 10.10.2011
comment
да. Я думаю, когда пользователь входит в Twitter, я могу отправить данные для входа в Tastypie через UserResource... опять же, теоретически XD   -  person yretuta    schedule 10.10.2011


Ответы (2)


Я сделал что-то подобное с django + deliciouspie и входом в facebook для iOS.

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

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

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

  3. На стороне сервера подтвердите и т.д..., а затем создайте свой собственный внутренний токен "tastypie" и верните его в ответ на запрос на получение, например:

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

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. Убедитесь, что для ВСЕХ других ресурсов, на которых вы хотите использовать аутентификацию, установлено значение ApiKeyAuthentication() в метаданных.

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

Авторизация

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

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

person jawache    schedule 10.11.2012

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

person Chris Keele    schedule 22.06.2012