如果我在应用程序中使用flask_会话,为什么会出现400错误?

如果我在应用程序中使用flask_会话,为什么会出现400错误?,flask,flask-wtforms,flask-session,Flask,Flask Wtforms,Flask Session,最近,我开始在我的应用程序中使用flask_会话扩展,出于安全目的,我也在使用flask_wtf.csrf扩展令牌 现在,在flask_会话之前,应用程序工作得很好,但是当我在config.py中安装flask_会话并配置它的参数时,如果我尝试登录或注册应用程序,会给我400个错误请求,CSRF会话令牌丢失。事实上,我在所有请求中包括csrf_令牌,包括ajax请求 会话存储类型为sqlalchemy: 我忘了提到,我注意到如果我将类型更改为“filesystem”,错误就不会出现 以下是有关更

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

现在,在flask_会话之前,应用程序工作得很好,但是当我在config.py中安装flask_会话并配置它的参数时,如果我尝试登录或注册应用程序,会给我400个错误请求,CSRF会话令牌丢失。事实上,我在所有请求中包括csrf_令牌,包括ajax请求

会话存储类型为sqlalchemy:

我忘了提到,我注意到如果我将类型更改为“filesystem”,错误就不会出现

以下是有关更多信息的详细信息

登录模板:

客户端视图.py:


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

SESSION_COOKIE_DOMAIN = "your_server_address"
我建议你根本不要设置SESSION\u COOKIE\u域,然后从那里继续尝试其他方法。
检查是否已将配置设置会话\u COOKIE\u设置为安全。如果您在localhost中工作或通过不安全的线路工作,并且您已将会话\u COOKIE\u SECURE设置为True,则不会发送会话COOKIE,因此,表单、csrf保护和各种其他操作都不会起作用。在这些情况下,请改用SESSION\u COOKIE\u SECURE=False。

用表单显示模板文件field@Nabin,你可以在上面看到,我更新了问题!有什么建议吗,伙计们,为什么我不能在csrf令牌保护中使用sqlalchemy类型?。使用文件系统,应用程序运行良好,但我想将它们存储在数据库中!!将python代码部分发布为well@Nabin,补充说!
<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>
@client_route.route('/client/cat-<dir_code>/login', methods=['GET','POST'])
def login():
    form_login = ClientLogin()
    if request.method == 'GET' and request.args.get('next'):
        session['next'] = request.args.get('next')

    if form_login.validate_on_submit():
        user = Client.query.filter_by(
            tele = form_login.telephone.data
        ).first()

        if user:
            if check_password_hash(user.password, form_login.password.data):
                session['client_logged_in'] = user.name
                session['client_family'] = user.family
                session['client_image'] = user.image
                session['client_phone'] = user.tele
                if 'next' in session:
                    next = session.get('next')
                    session.pop('next')
                    return redirect(next+'?current_user='+session.get('client_logged_in')+'+'+session.get('client_family'))
                else:
                    return redirect(url_for('client.lenta', dir_code=g.current_directory)+'?current_user='+session.get('client_logged_in')+'+'+session.get('client_family'))
            else:
                flash('Invalid credentials.', 'danger')
                return redirect(url_for('client.login', dir_code=g.current_directory))
        else:
            flash('Invalid credentials.', 'danger')
            return redirect(url_for('client.login', dir_code=g.current_directory))
    return render_template('client/login.html', user=user, form_login=form_login)
SESSION_COOKIE_DOMAIN = "your_server_address"