如何为我的iPhone和Android应用生成Django CSRF键以发送POST请求?
事情是这样的:
现在,在我的网站模板中,有一个{% csrf_token %},这个东西可以让我的网站发送一个表单的POST请求。
但是,如果我的iPhone应用(客户端)想要向我的网络服务发送一个POST请求,我该怎么给我的iPhone应用一个可以临时使用的CSRF令牌呢?
2 个回答
1
你可以在你的视图里设置一个带有唯一键的JsonResponse,像这样。
# Add in header
from django.http import JsonResponse
from django.middleware.csrf import get_token
...
在你的views.py文件中,用GET方法调用下面这个方法,并带上一个名为'secret'的查询字符串。
def code(request):
if(request.method == 'GET' and request.GET.get('secret', False) == 'CHANGE_ME'):
token = get_token(request)
return JsonResponse({'token': token, 'success': 'true'})
else:
return JsonResponse({'error': 'true', 'msg': 'Invalid secret'})
一旦你获得了CSRF(跨站请求伪造令牌),你就可以用你需要的信息提交POST请求了。
我正在使用Django 3.dev和Python3。
6
你的目标是重用一个已有的表单吗?如果是这样,iPhone 应用应该先获取包含表单的页面,然后使用 CSRF 令牌进行提交。CSRF 令牌的主要作用就是服务器需要自己生成这些令牌。
你的目标是让 iPhone 应用进行身份验证,以防其他应用向你的 API 提交数据吗?这就比较复杂了,因为你给 iPhone 应用的任何秘密信息都可能被下载了这个应用的任何人看到。