Ответ 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, и в этом случае вы можете просто использовать обычные схемы прав для пользователей, или вы можете перевернуть свои собственные. Это довольно просто.