我对Django和它的生态系统相对较新。我正在使用django-tastypie为我们的移动客户端编写REST api。我已经浏览了网上几乎所有关于如何使用tastypie创建REST接口的例子。但它们都不是特定于从客户端发布数据以及如何授权客户端。
我使用了示例中显示的tastypie.authentication.BasicAuthentication。它打开一个弹出窗口询问用户名和密码,并在浏览器上正常工作。但我不确定,它是否会在移动设备上做同样的事情(具体来说,本机IOS应用程序)。当用户没有使用浏览器而是使用本机应用程序时,如果用户将请求登录如何在他/她的移动设备上显示此弹出窗口,我就不太了解。
我完全迷失了,我真的很感激你的帮助。
答案 0 :(得分:2)
您可以查看来源并使用例如ApiKeyAuthentication。 你只需要POST用户名和api密钥来验证用户身份。
它看起来像ios应用程序可用。 这是检查代码的一部分。
def is_authenticated(self, request, **kwargs):
"""
Finds the user and checks their API key.
Should return either ``True`` if allowed, ``False`` if not or an
``HttpResponse`` if you need something custom.
"""
from django.contrib.auth.models import User
username = request.GET.get('username') or request.POST.get('username')
api_key = request.GET.get('api_key') or request.POST.get('api_key')
if not username or not api_key:
return self._unauthorized()
try:
user = User.objects.get(username=username)
except (User.DoesNotExist, User.MultipleObjectsReturned):
return self._unauthorized()
request.user = user
return self.get_key(user, api_key)
https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authentication.py#L128 https://github.com/toastdriven/django-tastypie/blob/master/tastypie/authorization.py#L42
答案 1 :(得分:0)
感谢您的帮助。
我使用了@Iurii提到的类似方法。这是我的解决方案。
我写了一个用于处理身份验证的类并覆盖了is_authenticated方法。然后我可以在tastypie资源类的Meta定义中使用这个类。
from tastypie.authentication import BasicAuthentication from tastypie.resources import Resource, ModelResource # class for handling authentication class MyAuthentication(BasicAuthentication): def is_authenticated(self, request, **kwargs): # put here the logic to check username and password from request object # if the user is authenticated then return True otherwise return False # tastypie resource class class MyResource(ModelResource): class Meta: authentication = MyAuthentication()
这将确保访问资源的请求将通过您的身份验证代码。