如何为我的iPhone和Android应用生成Django CSRF键以发送POST请求?

3 投票
2 回答
1834 浏览
提问于 2025-04-16 08:35

事情是这样的:

现在,在我的网站模板中,有一个{% 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 应用的任何秘密信息都可能被下载了这个应用的任何人看到。

撰写回答