Я сделал нечто похожее с django + tastypie и входом в Facebook для iOS.
Аутентификация
Войдите в систему любым доступным способом, получите access_token .
Создайте конечную точку вкусного запроса GET, в которую вы передадите маркер доступа в виде строки запроса .
- На стороне сервера проверьте и т. Д., А затем создайте свой собственный внутренний токен «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
Передать возвращенный ключ API на все последующие вызовы. Может быть либо снова в качестве параметра строки запроса, либо я установил его в заголовке авторизации для каждого вызова.
Убедитесь, что ALL для других ресурсов, для которых вы хотите выполнить аутентификацию, в Meta установлено ApiKeyAuthentication()
.
<code>class ThingResource(ModelResource):
class Meta:
queryset = Thing.objects.all()
resource_name = 'thing'
authentication = ApiKeyAuthentication()
Авторизация
Итак, теперь на стороне сервера вы знаете, что пользователь - это тот, о ком говорят, что ему разрешено делать? Вот что такое мета авторизации.
Вы, вероятно, хотите Авторизация Django , в этом случае вы можете просто использовать обычные схемы разрешений для пользователей, или вы можете свернуть свои собственные. Это довольно просто.