1

我的网站有问题,该网站是使用 python、flask、gunicorn + supervisorctl、nginx 堆栈构建的。

问题是:如果我在对其进行一些更新后通过“sudo supervisorctl reload”重新启动我的网站后以用户身份登录(例如管理员),则任何尝试登录的用户都会以管理员身份登录,即使他们输入一个随机的用户名和密码组合,显然这是非常惊人的。

我目前正在使用 flask_login 插件来处理登录,但我怀疑这与烧瓶会话及其交互方式有关。

我的登录代码如下

from flask import render_template, flash, redirect, url_for, request, current_app, session
from flask_login import current_user, login_user, logout_user, login_required

@bp.route('/login', methods = ['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('main.user'))
    form=LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username = form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            return redirect(url_for('auth.login'))
        login_user(user, remember=form.remember_me.data)
        next_page = request.args.get('next')
        if not next_page or url_parse(next_page).netloc != '':
            next_page = url_for('main.user')
        return redirect(next_page)
    return render_template('auth/login.html', title=_('登录'), form=form)

我还使用烧瓶会话来识别当前语言和管理翻译

在主路由中:

@bp.before_app_request  ####Michael: becareful of these
def before_request():
    if current_user.is_authenticated:
        current_user.last_seen = datetime.utcnow()
        db.session.commit()


@bp.context_processor
def inject_conf_var():
    return dict(CURRENT_LANGUAGE=session.get('language', 
request.accept_languages.best_match(current_app.config['LANGUAGES'])))

在我的初始化中

@babel.localeselector
def get_locale():
    # if the user has set up the language manually it will be stored in the session,
    # so we use the locale from the user settings
    try:
        language = session['language']
        print(session['language'])
    except KeyError:
        language = None
    if language is not None:
        return language
    return 
request.accept_languages.best_match(current_app.config['LANGUAGES'])

我不确定从哪里开始确定问题所在,目前它有点超出我的范围。我看到的最近的事情是这样的:

用户似乎以其他用户身份登录

但在我的情况下,计算机上似乎也发生了同样的事情,所以并不是真正的 VPN 问题,我不确定相同的解决方案是否可行。

感谢您的帮助!

4

0 回答 0