第一个发布请求烧瓶中缺少CSRF令牌

时间:2018-11-20 05:20:15

标签: flask flask-wtforms

我正在尝试烧瓶,我有以下路线提供的表格:

@app.route("/register",methods=['GET','POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        employee = Employee(name=form.name,emp_id=form.emp_id,email=form.email,password=form.password)
        return redirect(url_for('home'))
    return render_template('register.html',form=form)

我想进行客户端验证,只是为了检查输入的电子邮件是否存在于数据库中。我尝试将电子邮件字段提交到下面给出的其他路由,以查看其工作原理。

@app.route('/email',methods=['POST'])
def email():
    print(request.form['email'])
    return "success"

以下是我的ajax请求的javascript代码,当输入字段中发生模糊事件时会调用该代码。

function emailSubmit(event) {

    console.log($('#email').serialize());
    $.ajax({
        type: "POST",
        url: url,
        data: $('#email').serialize(), // serializes the form's elements.
        success: function(data) {
            console.log(data) // display the returned data in the console.
        }
    });

    $.ajaxSetup({
        beforeSend: function(xhr, settings) {
            if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrfToken)
            }
        }
    })

}

javascript文件位于静态文件夹中,并且使用全局变量提供url和csrf_token。

问题在于,在对“电子邮件”路线的首次发布请求中,我得到了

  

错误的请求“缺少CSRF令牌。”

但是从下一个帖子请求开始,一切都很好。相同的csrf令牌也会在下一个请求中发送。为什么会这样呢? 我已全局启用csrf保护。

0 个答案:

没有答案