我的网站存在问题,该网站是使用python,flask,gunicorn + supervisorctl,nginx堆栈构建的。
问题是:如果我在对网站进行了一些更新后通过“ sudo administratorctl reload”重新启动我的网站后以用户身份登录(例如,以admin为例),那么之后尝试登录的任何用户都将以admin身份登录即使他们输入了随机的用户名和密码组合,也很明显。
我当前正在使用flask_login插件来处理登录,但是我怀疑与flask会话及其交互方式有关。
我的登录代码如下
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)
我还使用flask会话来识别当前语言并管理翻译
在主路由中:
@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'])))
以及我的 init
@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'])
我不太确定从哪里开始找出问题所在,此刻问题超出了我的范围。我看到的最近的东西是:
Users appear to be logged in as another user
但是,就我而言,同一件事似乎在所有计算机上发生,因此并不是VPN问题,我不确定是否可以使用相同的解决方案。
感谢您的帮助!