telegram bot — как получить username и другие данные пользователя, когда он запустил бот. Задача их передать в БД
Сразу скажу что новичок. Буду благодарен за реальную подсказку.
В общем суть: Работает FSM Пользователь вводит текст допустим это Email идет проверка на валид
все ок и запись в БД sqlite
но надо здесь же пока FSM не финишировала передать в БД username id и другое.
код вот
class FSMPartnerbaze1(StatesGroup): name = State()# Начало ввода почты # @dp.message_handler(content_types=['text'], text='Марафон', state=None) async def cm_start(message: types.Message): await FSMPartnerbaze1.name.set() await message.answer('Пожалуйста, укажите Вашу почту. Она нужна для корректной работы с Вами!') print("FSM запущена") # Ловим ответ и пишем в словарь # @dp.message_handler(state=FSMPartnerbaze1.name) #временно для понимания async def get_email(message: types.Message, state: FSMContext): async with state.proxy() as data: data['name'] = message. text email = message.text await state.update_data( {'email': email} ) regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+') if re.fullmatch(regex, email): print("Valid email") await sqlite_db.sql_add_command(state) await state.finish()
в Sqlite_db.py
import sqlite3 as sq def sql_start(): global base, cur base = sq.connect('db.db', check_same_thread=False) cur = base.cursor() if base: print('Подключился к БД') base.execute('CREATE TABLE IF NOT EXISTS test(username, name TEXT)') base.commit() async def sql_add_command(state): async with state.proxy() as data: cur.execute('INSERT INTO test VALUES (?,?)', tuple(data.values())) base.commit()
Я правильно понимаю, что как только открыли словарь
async with state.proxy() as data:
мы можем после него писать методы, аргументы, значения и все это как бы сохраняется в словаре?
или реализация иная?вот нашел такой код
conn = sqlite3. connect('db.db', check_same_thread=False) cursor = conn.cursor() @dp.message_handler(commands=['start']) async def start_message(message): await bot.send_message(message.chat.id, 'Добро пожаловать') def db_table_val(user_id: int, user_name: str, user_surname: str, username: str): cursor.execute('INSERT or IGNORE into test (user_id, user_name, user_surname, username) VALUES (?, ?, ?, ?)', (user_id, user_name, user_surname, username)) conn.commit() @dp.message_handler(content_types=['text']) async def get_text_messages(message): if message.text.lower() == 'привет': await bot.send_message(message.from_user.id, 'Привет! Ваше имя добавленно в базу данных!') us_id = message.from_user.id us_name = message.from_user.first_name us_sname = message.from_user.last_name username = message.from_user.username db_table_val(user_id=us_id, user_name=us_name, user_surname=us_sname, username=username)
я так полагаю его как то и можно применить?
Django login пользователя вместо id в профиле кастомного пользователя
Вопрос задан
Изменён 2 года 1 месяц назад
Просмотрен 133 раза
Как использовать login вместо id при обращении к профилю пользователя
views. py
class userProfileDetailView(RetrieveUpdateDestroyAPIView): queryset = Profile.objects.all() serializer_class = UserProfileSerializer lookup_field = 'user' permission_classes = [IsOwnerProfileOrReadOnly, IsAuthenticated]
urls.py
urlpatterns = [ path("all-profiles", UserProfileListCreateView.as_view(), name="all-profiles"), path("profile/<str:user>/", userProfileDetailView.as_view(), name="profile"), ]
serializers.py
class UserCreateSerializer(UserCreateSerializer): class Meta(UserCreateSerializer.Meta): model = UserAccount fields = ('id', 'login', 'email', 'firstName', 'lastName', 'password') class UserProfileSerializer(serializers.ModelSerializer): user = UserCreateSerializer(required=True) class Meta: model = Profile fields = '__all__'
- django
- django-rest-framework
Если не сработает lookup_field = 'user__login', то можете переопределить
get_object()` вьюхи:
def get_object(self): try: return Profile.objects.get(user__login=self.request.kwargs['user']) except Profile.DoesNotExist: raise Http404
Зарегистрируйтесь или войдите
Регистрация через Google Регистрация через Facebook Регистрация через почтуОтправить без регистрации
ПочтаНеобходима, но никому не показывается
Отправить без регистрации
ПочтаНеобходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Аутентификация. Каковы плюсы и минусы использования адреса электронной почты в качестве идентификатора пользователя?
Задавать вопрос
спросил
Изменено 7 месяцев назад
Просмотрено 17 тысяч раз
Я создаю веб-приложение, которое требует регистрации/аутентификации, и я рассматриваю возможность использования адреса электронной почты в качестве единственного идентификатора пользователя. Вот что я вижу в плюсах и минусах (обновлено ответами):
PROS
На одно поле меньше, которое необходимо заполнить при регистрации (это будет просто адрес электронной почты, пароль и подтверждение пароля).
Я большой поклонник минималистичной регистрации.Адрес электронной почты легче запомнить. (спасибо Митчу, Джереми)
Вам не нужно беспокоиться о том, что ваше любимое имя пользователя уже занято — вы единственный, кто использует ваш адрес электронной почты. (спасибо TStamper)
ПРОТИВ
Пользователю приходится вводить больше каждый раз, когда он входит в систему.
Что делать, если пользователю нужно несколько учетных записей? Им понадобится другой адрес электронной почты. (Хочу ли я, чтобы пользователь мог создавать несколько учетных записей?)
Потенциальному злоумышленнику легко догадаться (если он знает адрес электронной почты цели, он знает и логин). (спасибо Василий)
-
У пользователей может возникнуть соблазн использовать тот же пароль, который они используют для своей учетной записи электронной почты, что является плохой защитой. (спасибо Томасу)
Если вы часто меняете адреса электронной почты, может быть трудно вспомнить, какой адрес вы использовали для регистрации на сайте после долгого перерыва. (спасибо Software Monkey)
Хакер может заспамить регистрационную форму и использовать ответы «электронная почта уже занята» для создания списка действительных электронных писем. (спасибо Дэвид)
Не у всех есть адрес электронной почты. (спасибо Николай)
Если бы я использовал электронную почту в качестве идентификатора, я бы предоставил механизм, позволяющий изменить его в случае, если пользователь изменит адрес. В этом случае пользователи не будут размещать контент на общедоступном сайте, поэтому отдельное имя пользователя не потребуется для защиты адресов электронной почты (но это следует учитывать для других сайтов).
Другой вариант — внедрить OpenID (это отдельная тема).
Кажется, это работает для Google, но их службы тесно интегрированы. Что я упустил в своем анализе? У вас есть какие-нибудь рекомендации? Есть ли у кого-нибудь опыт, которым можно поделиться?
ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ
Спасибо всем за ответы. Я решил использовать электронную почту в качестве идентификатора, но затем разрешить создание имени пользователя для входа в систему после регистрации. Это обеспечивает некоторую гибкость, сохраняя регистрацию как можно более короткой. Это также предотвращает проблемы, когда пользователь меняет адреса электронной почты (они могут просто войти в систему со своим именем пользователя и обновить его). Я также буду внедрять методы предотвращения подбора адресов электронной почты из систем регистрации и входа в систему (в основном период охлаждения после неоднократных попыток).
- электронная почта
- аутентификация
- регистрация
Лично я предпочитаю просто использовать свой адрес электронной почты в качестве имени пользователя. Одной вещью меньше, и мне никогда не придется беспокоиться о том, что мое любимое имя уже занято.
Мои 2 цента!
Думаю, вы пропустили PRO:
Пользователи, скорее всего, помнят свой адрес электронной почты; а поскольку адреса электронной почты уникальны, им никогда не придется беспокоиться о том, что их предпочтительное имя пользователя уже занято.
Как пользователь веб-сайтов, я могу сказать вам, что ненавижу запоминать ненужные имена пользователей. Я не использую уникальный идентификатор или что-то в этом роде, поэтому я никогда не смогу вспомнить, какой вариант моего имени еще не был занят. Я бы предпочел ввести свой адрес электронной почты.
Также мне нравится OpenID.
2CONS
- Когда для учетной записи электронной почты используется один и тот же пароль, компрометация одного автоматически означает компрометацию другого.
ПРОТИВ: Не у всех есть адрес электронной почты. Подумайте, обращалось ли к вашей базе данных внутреннее приложение. Если вы управляете магазином, люди позвонят и разместят заказ по телефону и откажутся предоставить адрес электронной почты. Так что, хотя адрес электронной почты в качестве идентификатора пользователя по умолчанию — это круто, обязательно разрешите альтернативным пользователям войти в систему. (Конечно, это зависит от контекста.)
Выучил это на собственном горьком опыте.
2Я склонен не предпочитать списки плюсов и минусов, а вместо этого стараюсь думать о преимуществах и проблемах.
Вызов:
У некоторых пользователей может возникнуть соблазн использовать свой адрес электронной почты от своего интернет-провайдера. Ссылка только на электронную почту может быть затруднена для пользователей, которые забывают обновить свою электронную почту на всех веб-сайтах, на которые они подписались, прежде чем сменить интернет-провайдера.
Вместо:
Вам следует разрешить пользователю указывать несколько адресов, а также выбранный пользователем идентификатор, а затем позволить пользователю решать, что он хочет делать. Возможно, также следует разрешить пользователю предоставлять учетную запись OpenID.
Один вариант настройки, который вы можете рассмотреть: наличие имени пользователя и адреса электронной почты. Электронная почта используется для входа в систему и всегда остается конфиденциальной, имя пользователя используется для идентификации пользователя при любом общедоступном взаимодействии, например при публикации комментария. Это оказывается немного более безопасным, поскольку обе половины учетных данных пользователя хранятся в секрете, тогда как если вы используете имя пользователя как для входа, так и для публичной идентификации, половина входа уже известна.
Я определенно согласен с вами в отношении минимальной регистрации в большинстве случаев, но в зависимости от того, что вы делаете, вы можете сбалансировать это с дополнительной безопасностью для ваших пользователей. Четыре поля не являются возмутительными для регистрации (имя пользователя, адрес электронной почты, пароль, подтверждение пароля), и если вы чувствуете себя особенно предприимчивым, вы можете сократить их до трех, удалив поле подтверждения пароля, или два, отправив им пароль по электронной почте. что они могут измениться позже.
1ПРОТИВ: Если я изменю свой адрес электронной почты, внезапно все имена моих учетных записей станут недействительными. Мое имя не меняется, но часто меняется моя электронная почта. Я иногда повторно посещал сайт через несколько лет и застрял… какой у меня был адрес электронной почты два года назад???
3PRO
Люди ненавидят создавать уникальное имя, которое соответствует их идентификатору и еще не используется для регистрации на сайте. Вот почему идентификатор пользователя равен 9.0015 АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ так принят.
ex :TStamper1930, кто на самом деле хочет запомнить 1930 в конце моего имени, которое я очень хотел
0CON: Если хакер попытается зарегистрировать случайные адреса электронной почты в массовом порядке, он или она сможет выяснить, какие из этих адресов являются действительными, основываясь на том, какая регистрация не удалась. Это тактика, которую можно использовать для составления списков известных действительных адресов электронной почты, которые являются ходовым товаром на черном рынке спама.
Хотя теперь, когда я об этом думаю, это проблема, которая затрагивает любой веб-сайт, который запрашивает адрес электронной почты как часть процесса регистрации, независимо от того, существует ли отдельное имя пользователя. Но все же есть над чем подумать.
4Придерживайтесь адресов электронной почты, они используются повсеместно, на самом деле их использует большинство крупных веб-сайтов, они уникальны, поэтому они избавляют пользователя от попыток найти имя, которое не используется другими, также пользователи не забудут свои адреса электронной почты ( по крайней мере, в большинстве случаев :)), что отличается от имен пользователей, которые они будут постоянно забывать, если не будут часто посещать ваш сайт.
Вам не следует беспокоиться о том, что они слишком длинные, так как все основные браузеры (IE, FF . . и т. д.) предлагают автозаполнение форм, которое включено по умолчанию, поэтому вы вводите первые буквы в своем электронном письме, и вы получаете дроп вниз список (то есть список автозаполнения), где вы просто щелкаете, чтобы ввести весь адрес электронной почты, лично я почти никогда не ввожу адрес электронной почты полностью, я всегда набираю первые буквы, а затем выбираю адрес электронной почты из раскрывающегося списка автозаполнения. Кроме того, если вы позволите запоминать пользователей (с помощью флажка «Запомнить меня» и постоянных файлов cookie), это будет еще одной причиной не беспокоиться об этом.
Я не знаю о вашем приложении, но, как правило, пользователи с несколькими учетными записями нежелательны в большинстве приложений.
Одним из недостатков может быть то, что, если это адрес электронной почты, люди могут угадать логин, и могут быть предприняты попытки атак методом грубой силы. Что на самом деле не является большой проблемой, так как сегодня на большинстве сайтов логины отображаются публично.
Самый большой плюс в том, что таким образом легче запомнить логины.
Хорошей настройкой является запрос имени пользователя и электронной почты. Разрешение пользователю входить в систему либо с адресом электронной почты, либо с именем пользователя очень удобно для пользователя. Дополнительным преимуществом является то, что пользователь может изменить свой адрес электронной почты. Это также позволит использовать несколько учетных записей для одного электронного письма.
Чтобы решить вашу проблему, связанную с тем, что электронное письмо слишком длинное, чтобы вводить его каждый раз. Я реализовал библиотеку StringScan Ruby.
требуется 'strscan' def signup!(пользователь, &блок) self.email = user[:email] если только user[:email].blank? str = StringScanner.new(self.email) str.scan_until(/@/) str.pre_match self.login = str.pre_match
и т.д..
Затем просто измените метод входа, чтобы разрешить либо адрес электронной почты, либо логин, совпадающий с паролем.
Это работает так же, как Google или Mobileme. Пользователь может просто ввести свое имя пользователя электронной почты (например, имя пользователя вместо имени пользователя@gmail.com.)
Я борюсь с удалением этого прямо сейчас. Вот более новый CON из текущей эпохи.
Многие правительства считают адрес электронной почты личной информацией (PII). Следовательно, необходимо проявлять особую осторожность каждый раз, когда вы отображаете его на странице или даже возвращаете из конечной точки.
Учтите, что многие сайты позволяют взаимодействовать между разными пользователями. Часто это означает, что сайт будет предоставлять список пользователей на выбор (например, раскрывающийся список или результаты поиска). Это может фактически позволить сайту утечку PII.
Имена пользователей, с другой стороны, могут быть полностью анонимными. Учитывая распространенность сегодня менеджеров паролей, пользователям действительно не нужно запоминать свое имя пользователя и пароль.
Если вы не хотите заставлять своих пользователей входить в ваше приложение через Facebook или какую-либо другую социальную сеть (большинству людей, кажется, все равно), вы можете просто использовать их электронную почту в социальной сети в качестве их «идентификатора пользователя». при ссылке на другие таблицы/документы (MySQL, Mongo и т. д.).
Я заметил, что преимуществом использования логинов в социальных сетях является то, что вся безопасность была обеспечена указанной социальной сетью, в том числе не позволять 2 пользователям иметь один и тот же адрес электронной почты или имя пользователя в своей базе данных, что избавляет вас от хлопот, связанных с для кода для всего этого. Это всего лишь мои личные предпочтения. 9Аутентификация 0003
. Каковы плюсы и минусы использования электронной почты в качестве имени пользователя?
спросил
Изменено 8 лет, 3 месяца назад
Просмотрено 35 тысяч раз
В нынешнем виде этот вопрос не подходит для нашего формата вопросов и ответов. Мы ожидаем, что ответы будут подкреплены фактами, ссылками или опытом, но этот вопрос, скорее всего, вызовет дебаты, аргументы, опросы или расширенное обсуждение. Если вы считаете, что этот вопрос можно улучшить и, возможно, снова открыть, посетите справочный центр для получения инструкций.
Закрыта 10 лет назад.
Вы знаете, что в большинстве форм входа используется пользователь и пароль.
А некоторые отправляются по электронной почте и проходят. Каковы их плюсы и минусы? Вот о чем я подумал.
ПРЕИМУЩЕСТВА электронной почты
- На одну вещь меньше (в отличие от запоминания имени пользователя)
- Всегда должен быть уникальным для каждого пользователя
- На одну вещь меньше, чтобы попросить их зарегистрироваться
ПРОТИВ
- Если они изменят адрес электронной почты, могут ли они попытаться использовать свой новый адрес электронной почты для доступа к сайту?
- Из-за того, что вы забыли пароль — и там написано «пожалуйста, введите свой адрес электронной почты», и они отказались от своей старой электронной почты — они потенциально могут застрять.
Я действительно считаю, что это связано с программированием, потому что простота использования веб-приложения является важным фактором, который нельзя упускать из виду.
- электронная почта
- аутентификация
Следует также помнить, что если другие пользователи также могут видеть «имя пользователя», вам не следует использовать почтовые адреса из соображений конфиденциальности.
2Еще одна проблема, которая может возникнуть при использовании электронной почты в качестве имени пользователя, — это атака «сбора пользователей». Например, если у вас есть страница «изменить адрес электронной почты» или при создании нового пользователя, если новый пользователь вставит адрес электронной почты, который уже существует, тогда приложению придется отправить обратно ошибку. Следовательно, злоумышленник может обнаружить всех пользователей в приложении, выполнив простой скрипт (если пользователь не существует, он будет добавлен)
2OpenID и OAuth . …. Просто кажется лучше. Еще меньше пользователей для их управления, и это упрощает миграцию в одном месте при смене.
Да, ты должен быть осторожен. Я бы настаивал на том, чтобы резервный адрес электронной почты (дополнительное поле профиля) отличался от адреса электронной почты, который они используют для пользователя. Во многих системах также есть некоторые другие поля, которые затем можно использовать для аутентификации, если что-то становится действительно сложным. Однако на этом этапе часто требуется звонок в службу технической поддержки.
В зависимости от типа системы использование электронной почты может представлять собой уязвимость системы безопасности. Я знаю ваш адрес электронной почты, я не знаю, что вы могли бы указать в приглашении имени пользователя. Если бы я мог легко угадать имя пользователя, я бы не стал использовать адрес электронной почты.
1Я считаю, что минусы перевешивают плюсы в том, что касается безопасности. Многие компании повторно используют адреса электронной почты, поэтому, если пользователь больше не использует адрес электронной почты (удаляет свою учетную запись электронной почты), он МОЖЕТ быть повторно использован для использования любым другим человеком.
В этом случае любое другое лицо может получать периодическую корреспонденцию от вашей организации. Это позволяет новому пользователю узнать, что предыдущий пользователь учетной записи имел логин в вашей организации. Если вы используете простой сброс пароля на основе электронной почты, без дополнительных проверок, таких как контрольные вопросы, тогда все, что им нужно сделать, это восстановить пароль, используя адрес электронной почты, которым они теперь владеют, и у них есть доступ к учетной записи этого человека.
Надеюсь, вы не программируете для банка. USBank.com использует имя пользователя, а не адрес электронной почты. У меня также есть счет в кредитном союзе, и они тоже не используют электронную почту, а вместо этого используют номера счетов, которые они никогда не используют повторно.
Если безопасность является приоритетом, никогда не используйте электронную почту.
2Электронная почта является хорошим именем пользователя, если вы предоставляете средства для изменения адреса электронной почты. LinkedIn предоставляет это, когда вы создаете учетную запись с адресом электронной почты в качестве имени пользователя. Они также позволяют вам (после входа в систему) изменить основной адрес электронной почты, который затем изменит ваше имя пользователя на этот адрес электронной почты.
Пока вы делаете что-то подобное, все должно быть готово.
1Электронная почта (pro) — уменьшает спам при создании учетной записи, поскольку вы можете подтвердить их учетную запись, отправив им электронное письмо.
3Против: Если вам требуется, чтобы имя пользователя было общим для таких приложений, как веб-сайт и электронная почта, это может вызвать проблемы с безопасностью. Например, тот, кто имеет доступ к именам пользователей на веб-сайте, также будет иметь доступ к адресам электронной почты, если адрес электронной почты используется для имени пользователя. Обычно это не проблема, но может быть. Как правило, хорошей политикой является разделение имен пользователей и паролей между приложениями, если нет общей процедуры входа в систему или если безопасность не важна.
1ПРОТИВ: на один изолирующий слой между пользователем и спамером меньше. Если каким-то образом кто-то получит полный список имен пользователей, он сможет рассылать спам всем вашим пользователям. Но если на сайте используются имена пользователей, а электронная почта является дополнительным полем, это не проблема.
Если, конечно, они не получат все пользовательские данные, но в любом случае это гораздо большая проблема.
Я сделал это для приложений b2b, и это настоящая боль, когда пользователь покидает клиентскую компанию, а кто-то другой использует старый деактивированный адрес электронной почты в качестве логина и намеренно не меняет его, чтобы избежать получения электронной почты от нас.
Мы получаем электронное письмо со сбросом пароля, которое возвращается, и звонки в службу поддержки, чтобы исправить ситуацию.
Еще одно замечание, если вы собираетесь разрешить учетным записям быть общедоступными, заключается в том, что отсутствие требования имени пользователя означает, что вы должны разрешить «отображаемое имя» (вы, конечно, не будете показывать адрес электронной почты), но если ваши пользователи захотят используйте их настоящие имена, есть вероятность дублирования имен, что может вызвать путаницу (подумайте о двух комментаторах SO без фотографий и с одним и тем же именем, предполагается, что это один и тот же человек, если вы не перешли к полному профилю). В этом случае вам придется либо принудительно ввести уникальное отображаемое имя (которое может помешать кому-то использовать настоящее имя), либо просто принять тот факт, что у вас могут быть два Боба Джонсона, которые сбиваются с толку.
Когда вы используете адреса электронной почты, участнику легче изменить свое имя пользователя, например, когда pwng0d69 хочет быть известным как Джон Скит. Однако для каждого сайта, который запрашивает мой адрес электронной почты, лично я съеживаюсь из-за еще одного источника потенциального спама.
Используйте Open ID 🙂
PRO: Похоже, что некоторые сервисы рассматривают возможность сделать электронную почту стандартом для идентификации конкретного пользователя в сети:
например. http://www.techcrunch.com/2009/08/14/google-points-at-webfinger-your-gmail-address-could-soon-be-your-id/
КОН: Этого еще не произошло, и есть много других вариантов, таких как OpenAuth и OpenID, которые уже существуют и имеют некоторую поддержку (у вас также есть вход в систему с помощью распространения Facebook).
Просто адаптируйте свой выбор идентичности к любой целевой аудитории вашего приложения.
Мы использовали программное обеспечение Arena Solutions «Управление жизненным циклом продукта» до того, как изменение формы собственности компании потребовало внесения изменений. Это была одна из тех сделок, когда все конфиденциальные данные вашей компании размещались где-то в оффшорной зоне, и к ним можно было получить доступ через браузер из любого места.
Arena PLM рекламировалась как очень безопасная, но поведение (по умолчанию) заключалось в том, что в качестве имени пользователя требовался адрес электронной почты. Это позволяло использовать надежные пароли с датой истечения срока действия, но когда срок действия моего пароля истек, мне сказали, что я могу выбрать другой или просто продолжать использовать старый!
Я думаю, что требования безопасности были основаны на использовании SSH для передачи данных, но мне показалось, что решительный человек может войти в систему, потому что
- Имена пользователей были общедоступны компания адресов электронной почты и
- Было много времени, чтобы подобрать пароль, потому что ленивый пользователь не стал бы выбирать новый.
Это означает, конечно, что использование и обновление надежных паролей должно быть принудительно .
Очень активный вопрос .