Как регистрировать пользователей в телеграм боте на python (aiogram)

Сделал регистрацию путем установки состояний, в которых мы перехватываем ответы пользователя и записываем в переменные, после проработки всех состояний, мы записываем в бд информацию о пользователе. Проблема заключается в том, что если регистрироваться будут одновременно 2 пользователя, то бот может записать в переменные данные, которые вводит другой пользователь. Как я мог бы это исправить? (по необходимости готов приложить код)

class AwaitMessages(StatesGroup):
    fio_add = State()
    phone_add = State()

@dp.message_handler(state=AwaitMessages.fio_add)
async def process_fio_add(message: types.Message, state: FSMContext):
    user_registration.fio = message.text
    await state.finish()
    await client.send_message(message.chat.id, 'Введите телефон: ')
    await AwaitMessages.phone_add.set()

Ответы (2 шт):

Автор решения: oleksandrigo
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State

import config

bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)


class AwaitMessages(StatesGroup):
    fio_add = State()
    phone_add = State()


@dp.message_handler(state=AwaitMessages.fio_add)
async def process_fio_add(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['fio'] = message.text
    # зачем?
    # await state.finish()
    # нет смысла юзать bot.send_message если вы отправляете в этот же чат
    # await bot.send_message(message.chat.id, 'Введите телефон: ')
    await message.answer('Введите телефон.')
    await AwaitMessages.phone_add.set()


@dp.message_handler(state=AwaitMessages.phone_add)
async def process_fio_add(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['phone'] = message.text
        await message.answer(f'ФИО - {data["fio"]}\nНомер - {data["phone"]}')


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

→ Ссылка
Автор решения: Munchen777

Как по мне, то в старте, например, нужно проверить есть ли такой пользователь в бд? Кстати, если вы используете базу данных sqlite + orm peewee с использованием классов, то можно в процессе получения данных (имя, номер телефона) обновлять:

await state.update_data(name=message.text)
…
await state.update_data(phone=message.contact.phone_number)

Далее как получили данные и хотите их записать в бд:

user_data = await state.get_data()

Дальше по ключу присваиваете значения.

→ Ссылка