Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌应用程序引擎&x2B;Django+;文件传输失败_Django_Google App Engine_Django Rest Framework - Fatal编程技术网

谷歌应用程序引擎&x2B;Django+;文件传输失败

谷歌应用程序引擎&x2B;Django+;文件传输失败,django,google-app-engine,django-rest-framework,Django,Google App Engine,Django Rest Framework,我已经在谷歌应用程序引擎上在线使用了几个月,没有任何问题。周二,所有文件上传都因CSRF问题而开始失败,这一切都改变了 本质上,我调用prepare\u upload从谷歌云存储获取一个一次性URL,用户将他们的文件发布到该URL,然后GCS在我的代码中调用一个URL来完成这个过程,这样我就可以处理上传的文件 移动应用程序正在使用Django Rest Framework的令牌身份验证机制进行身份验证,方法是在每个请求的Authorization头中发送一个auth令牌。这个标题似乎是从几天前开

我已经在谷歌应用程序引擎上在线使用了几个月,没有任何问题。周二,所有文件上传都因CSRF问题而开始失败,这一切都改变了

本质上,我调用
prepare\u upload
从谷歌云存储获取一个一次性URL,用户将他们的文件发布到该URL,然后GCS在我的代码中调用一个URL来完成这个过程,这样我就可以处理上传的文件

移动应用程序正在使用Django Rest Framework的令牌身份验证机制进行身份验证,方法是在每个请求的
Authorization
头中发送一个auth令牌。这个标题似乎是从几天前开始剥离的,但我不确定这是否是实际问题。CSRF检查失败的事实向我表明,正在跳过令牌身份验证步骤,而使用会话身份验证

我很困惑。是否有人确切地知道这个标题是否被谷歌云存储剥离,如果是,我如何覆盖它或解决它

这是我的
prepare\u upload
实用程序功能:

from google.appengine.ext.blobstore import create_upload_url

def prepare_upload(request, url, **kwargs):
    return create_upload_url(
        url,
        gs_bucket_name = settings.GOOGLE_CLOUD_STORAGE_BUCKET
    ), {}

这是可以解决的。请参阅。

By
云存储
您的意思是
谷歌云存储
?您还可以告诉我
准备上传
功能的来源吗?我很好奇它是否使用签名URL。是的,GCS。在问题中添加了我的prepare_upload功能。谢谢,还有几个问题:哪个URL给了你CSRF错误?是在上载文件时(即
/\u ah/upload
URL)还是重定向回应用程序?通过网络上传可以吗?当然可以!这是重定向回我的应用程序。上载到GCS成功,但我的端点没有接收到身份验证标头(这会导致应用程序退回到web会话身份验证),并且没有web会话(来自移动应用程序直接访问REST框架而没有web会话),因此CSRF检查失败。这正是问题所在。与此同时,我们重新发布了所有应用程序,以将用户安全令牌作为提交给GCS的表单的一部分传递给GCS,这样我们就不再依赖授权标头,因此,如果在文件上载过程中标头被剥离,那么现在我们就有了优雅的故障切换。感谢您在确定发生了什么事情方面给予的帮助!