Odoo联系表格中的错误请求400。会话已过期('无效的CSRF令牌')

问题描述 投票:1回答:1

我在Odoo v 10中遇到了联系表单中的错误,当我按下发送按钮时它会出现异常:

Traceback(最近一次调用最后一次): 在_dispatch result = request.dispatch()中输入文件“/usr/lib/python2.7/dist-packages/odoo/addons/base/ir/ir_http.py”,第195行 文件“/usr/lib/python2.7/dist-packages/odoo/http.py”,第823行,在dispatch raise werkzeug.exceptions.BadRequest('Session expired(invalid CSRF token)') BadRequest:400:错误请求

如果我添加代码以将其Github问题中建议的CSRF令牌加载到表单中:

<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>

它引导我到一个显示单词false的新空白页面。

在“Web布局”中,我有下一个javascript代码:

<script type="text/javascript">
    var odoo = {
        csrf_token: "<t t-esc="request.csrf_token(None)"/>",
    };
</script>  

我不知道这个代码是手动添加还是默认带有Odoo,因为这是一个继承的安装。

“联系我们”块配置了Send an Email动作和有效的Recipient emailThank You Page工作。

这是添加块后的最终代码(没有CSRF隐藏输入):

<section class="as-contact-us" style="background-image: url(/theme_laze/static/src/img/our-work.jpg)">
    <div class="container">
        ... Company description elements ...
            <div class="col-md-8">
                <form action="/website_form/crm.lead" method="post" data-model_name="mail.mail" data-success_page="/page/website_crm.contactus_thanks" class="s_website_form form-horizontal container-fluid mt32" enctype="multipart/form-data">
                    <div class="ascu-form">
                        <div class="row">
                            <div class="col-md-6">
                                <input class="form-control o_website_form_input" name="contact_name" required="" placeholder="Your Name*" type="text"/>
                            </div>
                            <div class="col-md-6">
                                <input class="form-control o_website_form_input" name="email_from" required="" placeholder="Your Email*" type="text"/>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-12">
                                <textarea class="form-control o_website_form_input" name="description" required="" placeholder="Message*"/>
                            </div>
                            <div class="col-md-12">
                                <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                                <button class="creative-btn1 o_default_snippet_text">Send</button>
                            </div>
                        </div>
                    </div>
                    <input class="form-field" name="email_to" value="[email protected]" type="hidden"/>
                </form>
            </div>
        ... Div closures ...                    
    </div>
</section>

有人知道问题在哪里吗?

我不想停用CSRF保护。

forms csrf odoo-10
1个回答
0
投票

我是一个路由问题!请参阅下面的代码“csrf = False”并插入以解决问题。

# /project/admin/post/{menu.name}/{submenu.name}/insert   
@http.route(['/project/admin/post/<string:project>/<string:area>/insert'],type='http', auth='user', ***csrf=False***, website=True)
© www.soinside.com 2019 - 2024. All rights reserved.