繁体   English   中英

Google Web Toolkit的Django 1.2 CSRF和HTTP帖子

[英]Django 1.2 CSRF and HTTP posts from Google Web Toolkit

我有一个与Django服务器端一起使用的GWT网络应用。 我最近将Django升级到1.2,并且无法从我的GWT应用程序获取HTTP帖子。 我收到此错误:

CSRF验证失败。 请求中止。

失败原因:

 CSRF token missing or incorrect. 

我启用了csrf中间件(“ django.middleware.csrf.CsrfViewMiddleware”,“ django.middleware.csrf.CsrfResponseMiddleware”),该软件可用于诸如登录之类的应用程序,但似乎令牌未添加到发布的帖子中通过GWT。 有任何想法吗? 提前致谢。

如果您已检查auth.login的模板,则会注意到<form>标记内显式包含了CSRF令牌。

<form method="post" action=".">
    {% csrf_token %}

GET请求中呈现页面时,此字段将扩展为隐藏字段。 就像是:

<form method="post" action=".">
    <div style='display:none'>
        <input type='hidden' name='csrfmiddlewaretoken' 
             value='90064bf0e86edacfdb60595e3e2b8f23' />
    </div>

然后将此令牌传递回 POST 上的视图并进行验证。

因此,然后才能POST到CSRF保护的视图,您必须首先从上述观点得到令牌。

在向视图发出POST请求之前,您可以验证/确保拥有CSRF令牌吗? 或者,您可以使用csrf_exempt装饰器为视图禁用CSRF保护。 不过,这可能不是一个好主意。

更新资料

这是我的问题的重点:我的前端未使用Django模板,因此无法使用令牌标记表单。 我在前端使用GWT,它正在渲染帖子的表单。

在渲染页面之前,您是否已经对Django视图进行了GET请求? 在这种情况下,您可以通过解析响应的内容来获取CSRF令牌。

如果不是这样,您将必须向视图显式发出GET请求(假设它支持GET )并解析响应以获取CSRF令牌。 有关示例,请参见此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM