CSRF令牌缺少Python烧瓶

时间:2015-05-25 08:03:59

标签: python

您好我是python flask web开发的新手。我一直想知道我的代码有什么问题,我一直在让CSRF令牌丢失。我使用的是Flask-WTF版本0.11。有些情况下验证成功,当我尝试再次单击上传按钮时,它只会重新加载或有时弹出我的文本字段上方的CSRF Token Missing字符串。这只发生在我在不同的域中访问时,它在我的localhost上运行:

这是我的config.py的部分代码:

class Config:
    WTF_CSRF_ENABLED = True
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'

这是我的login.html代码:

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}Chase POS - Login{% endblock %}

{% block page_content %}
<div class="page-header">
    <h1>Login</h1>
</div>
{{ form.hidden_tag() }}
<div class="col-md-4">
    {{ wtf.quick_form(form, method="POST", enctype="multipart/form-data") }}
</div>
{% endblock %}

这是我的views.py代码:

@main.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(id=form.id.data).first()
        if user is not None and user.verify_password(form.password.data):
            try:
                login_user(user, False)
                upload_file()
                return redirect(url_for('.login'))
            except ValueError:
                flash('Row ' + str(counter) + ': Incorrect value detected.')
            except TypeError:
                flash('Row ' + str(counter) + ': Data type mismatch. Failed to continue transaction.')
            except AttributeError:
                flash('Row ' + str(counter) + ': Some of the data cannot be found on the database.')
        else:
            flash('Invalid username or password.')
    return render_template('login.html', form=form)

我甚至尝试禁用csrf但仍然遇到同样的错误。希望你能帮助我,提前谢谢

2 个答案:

答案 0 :(得分:1)

form.hidden_tag()替换为form.hidden_tag。或者,恢复为旧版本的Flask-WTF(v0.9),他们仍使用form.hidden_tag()中的括号

答案 1 :(得分:1)

我在flaskwtform时遇到了同样的问题。添加CsrfProtect(app)为我解决了这个问题。

from flask import Flask
from flask_wtf.csrf import CsrfProtect
app = Flask(__name__)
app.secret_key = 'very secret'
CsrfProtect(app)

在模板中,执行:

{{ form.hidden_tag() }}
相关问题