GAE blobstore上载失败,缺少CSRF令牌

2024-05-15 00:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在应用引擎上运行烧瓶。我需要让用户上传一些文件。出于安全原因,我在整个应用程序中使用csrf = CsrfProtect(app),使用flask_wtf中的@csrf.exempt修饰符可以免除特定的url。(隐式拒绝比隐式允许好。)

使用blobstore.create_upload_url从blobstore获取上载url很好,但是上载本身会失败,并返回400CSRF token missing or incorrect.

此问题出现在开发服务器上。我还没有在真正的服务器上测试它,因为它正在生产中。在

如何排除/_ah/路径,以便上载正常工作?在


Tags: 文件用户引擎服务器app应用程序urlflask
2条回答

我倾向于使用http://flask-wtf.readthedocs.org/en/latest/csrf.html中概述的方法:

You can also disable CSRF protection in all views by default, by setting WTF_CSRF_CHECK_DEFAULT to False, and selectively call csrf.protect() only when you need. This also enables you to do some pre-processing on the requests before checking for the CSRF token:

该页给出的原始示例是:

@app.before_request
def check_csrf():
    if not is_oauth(request):
        csrf.protect()

当然,在您的情况下,您可以将其更改为:

^{pr2}$

注意,这仍然是默认的拒绝每个请求都需要CSRF保护。。。除非路径以/_ah/开头的用户,完全符合您的要求。在

好吧,所以真正的问题是我给了blobstore.create_upload_url()的successpath参数(即第一个)的绝对url,导致通知成功的请求在加载根路径(/)时导致csrf错误。我把它改成了一个相对于根的路径,现在只要正常使用@csrf.exempt就可以了。在

相关问题 更多 >

    热门问题