我的网站有问题,该网站是使用 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 问题,我不确定相同的解决方案是否可行。
感谢您的帮助!