Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

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

Спасибо заранее!

4b9b3361

Ответ 1

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

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

  • Войдите в систему, используя все, что вам нужно, получите access_token.

  • Создайте конечную точку tastypie запроса GET, с которой вы будете передавать accesstoken в виде строки .

  • На стороне сервера проверьте и т.д., а затем создайте свой собственный внутренний маркер "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

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

  • Убедитесь, что ВСЕ другие ресурсы, для которых вы хотите иметь аутентификацию, установите ApiKeyAuthentication() в метатеге

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

Авторизация

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

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

Ответ 2

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