@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
user = User.query.filter_by(username=request.form.get('username')).first()
if user and check_password_hash(user.password_hash, request.form.get('password')):
# Сохраняем временный ID для этапа 2FA
session['pre_auth_user_id'] = user.id
# ЕСЛИ ЕСТЬ 2FA - ОТПРАВЛЯЕМ ПОДТВЕРЖДАТЬ
if user.totp_secret:
return redirect(url_for('login_2fa'))
# ЕСЛИ 2FA НЕТ - СОЗДАЕМ СЕССИЮ СРАЗУ
session.pop('pre_auth_user_id', None)
token = secrets.token_hex(24)
new_session = UserSession(
user_id=user.id,
session_token=token,
ip_address=request.remote_addr,
user_agent=request.headers.get('User-Agent')
)
db.session.add(new_session)
db.session.commit()
session.update({
'user_id': user.id,
'username': user.username,
'session_token': token
})
return redirect(url_for('dashboard'))
flash('Ошибка входа', 'danger')
return render_template('login.html')