如果我在我的应用程序中使用了flask_session,为什么我会收到400错误?

时间:2017-08-30 10:20:02

标签: flask flask-wtforms flask-session

最近我开始在我的应用程序中使用flask_session扩展,我也使用 flask_wtf.csrf 扩展令牌用于安全目的。

现在,在flask_session之前,应用程序工作正常,但是当我安装了flask_session并在我的 config.py 中配置了参数时,如果我尝试登录或注册应用程序,则会给我{{1}事实上,我在所有请求中都包含了csrf_token,包括ajax请求。

会话存储类型为400 Bad Request The CSRF session token is missing.

sqlalchemy

我忘了提及,我注意到如果我将类型更改为'filesystem'错误没有显示出来。

以下是flask_session documentation以获取更多信息。

登录模板

SESSION_COOKIE_NAME = 'booking'
SESSION_TYPE = 'sqlalchemy'
PERMANENT_SESSION_LIFETIME = timedelta(seconds=120)
SESSION_SQLALCHEMY_TABLE = 'sessions'
SESSION_KEY_PREFIX = 'booking'

客户 views.py

<form class="login_form" role="form" action="{{url_for('client.login')}}" method="post">
    {{ login_form.hidden_tag() }}

    {% if login_form.telephone.errors %}
        {% for e in login_form.telephone.errors %}
            <p class="text-error">{{e}}</p>
        {% endfor %}
    {% endif %}
    {{login_form.telephone(class="_bit mat_input", id="form-phone-number", placeholder="You login")}}

    {% if login_form.password.errors %}
        {% for e in login_form.password.errors %}
            <p class="text-error">{{e}}</p>
        {% endfor %}
    {% endif %}
    {{login_form.password(class="_bit mat_input",  id="form-password", placeholder="Your password")}}

    <a href="" class="login_button">
        <button type="submit" class="mat_button _bib">Login</button>
    </a>

    <div class="_dis_b rfb">
        <div class="remember_row">
            <label for="remember" class="remember">remember me</label>
            {{login_form.remember_me(id="remember", class="check")}}
        </div>
        <div class="forgot_row">
            <a href="javascript:void(0);" class="forgot">Forgot password?</a>
        </div>
    </div>
</form>

2 个答案:

答案 0 :(得分:0)

这是一篇旧帖子,但对于有相同问题的任何人,请将以下行添加到settings.cfg文件中, 它对我有用:

SESSION_COOKIE_DOMAIN = "your_server_address"

答案 1 :(得分:0)

我建议您根本不要设置SESSION_COOKIE_DOMAIN,然后从那里继续尝试其他方法。 检查是否已设置配置设置SESSION_COOKIE_SECURE。如果您在localhost或通过不安全的线路工作,并且已设置SESSION_COOKIE_SECURE=True,则不会发送任何会话cookie,因此,任何形式,csrf保护和其他各种操作都不会起作用。在这种情况下,请改用SESSION_COOKIE_SECURE=False