【问题标题】:Google App Engine + Django + filetransfers failingGoogle App Engine + Django + 文件传输失败
【发布时间】:2016-02-19 00:24:54
【问题描述】:

我已经在 Google App Engine 上在线使用网络应用程序几个月了,没有任何问题。这一切都在周二发生了变化,所有文件上传都开始因 CSRF 问题而失败。

本质上,我调用 prepare_upload 从 Google Cloud Storage 获取一次性 URL,用户将他们的文件发布到该 URL,然后 GCS 在我的代码中调用一个 URL 来完成该过程,所以我有一个处理上传的文件。

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

我很困惑。有谁确切地知道此标头是否被 Google Cloud Storage 剥离,如果是,我该如何覆盖或解决它?

这是我的prepare_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
    ), {}

【问题讨论】:

  • Cloud Store 是指Google Cloud Storage
  • 另外你能告诉我prepare_upload 函数的来源吗?我很好奇它是否使用签名 URL。
  • 是的,GCS。将我的 prepare_upload 函数添加到问题中。
  • 谢谢,还有几个问题:哪个 URL 给了您 CSRF 错误?是在您上传文件时(/_ah/upload URL)还是重定向回您的应用程序?可以通过网络上传吗?
  • 当然!这是重定向回我的应用程序。上传到 GCS 成功,但我的端点没有收到 Authentication 标头(这导致应用程序回退到 Web 会话身份验证)并且没有 Web 会话(来自移动应用程序直接访问 REST 框架而没有 Web 会话),因此 CSRF 检查失败。

标签: django google-app-engine django-rest-framework


【解决方案1】:

这可能会得到解决。见this thread

【讨论】:

  • 这正是问题所在。与此同时,我们重新发布了所有应用程序,以将用户安全令牌作为提交给 GCS 的表单的一部分传递,这样我们就不再依赖于 Authorization 标头,所以现在如果在文件上传期间剥离标头,我们就有了优雅的故障转移.感谢您在确定发生了什么方面提供的所有帮助!
猜你喜欢
  • 2014-05-12
  • 2021-09-25
  • 2020-10-05
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
相关资源
最近更新 更多