Flask #15: Авторизация пользователей на сайте через Flask-Login

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 ส.ค. 2024
  • Инфо-сайт: proproprogs.ru
    Общая концепция авторизации пользователей через расширение Flask-Login. Рассматривается класс LoginManager, декоратор user_loader, login_required и функция login_user.
    Документация по Flask-Login: flask-login.re...

ความคิดเห็น • 70

  • @user-ji6df1ei2c
    @user-ji6df1ei2c 2 ปีที่แล้ว +11

    Класс. Я 10-20 минутные видео по два часа смотрю, повторяю всё переписывая код и всё равно ловлю кучу ошибок. Но только так новая инфа как то усваивается с практикой. И самое интересное, что я только щас что-то стал осознанием цеплять, то что делаю и пишу) Поймал ошибку, почитал, что не так. Проверил кучу файлов, залез в исходный код html, сверило название форм, нашёл ошибку исправил) И так на протяжении курса... То ли я криво переписываю, то ли местами файлы меняются и имена форм тоже, а может я кривой копипаст делаю с других форм) В общем и целом, я считаю что уже прогресс хотя бы потому, что я НИЧЕГО не понимал, а сейчас понимаю ЧТО-ТО на уровне полуинтуиции =) и при этом умудряюсь ошибки свои подтирать, которые к слову, в браузере сыпятся списком более чем на страницу. Но всё равно уже нравится, когда что-то получается. Прям воодушевляет =)

    • @AnnaIsHere
      @AnnaIsHere 2 ปีที่แล้ว +1

      Та же фигня, только два часа растягивается на несколько дней.

    • @orthodox-chanel
      @orthodox-chanel ปีที่แล้ว

      Чтобы усвоить нужно 2 раза пройти одно и то же как минимум))

    • @ZenLebowski
      @ZenLebowski 5 หลายเดือนก่อน

      мне кажется что ошибки - это не страшно. материал лучше усваивается когда ошибки находишь и исправляешь. это не меньшее удовольствие когда после копипасты все работает

  • @antonkroosh3624
    @antonkroosh3624 4 ปีที่แล้ว +12

    Здравствуйте, хотелось бы, чтобы вы сняли видео, или несколько по работе с github
    Лучший канал)

  • @user-gm2ir6rf1i
    @user-gm2ir6rf1i หลายเดือนก่อน +1

    спасибо большое, очень полезно

  • @AndriiNovak-ew8co
    @AndriiNovak-ew8co 4 ปีที่แล้ว +10

    Привет всем. Огромное спасибо автору. Хочу сказать пару слов о том что автор вставляет куски кода и просто есть готовые файлы. Это хорошая практика для тех кто учиться, для нас. Пока все от руки набрал, запомниш названия функций, переменных, учиш структуру кода. Допустил ошибку - есть шанс покопаться самому и найти её. Ребят, если юзать cntrl-C cntrl-V все намного проще, но потом же самому нужно будет код писать на работе))) Автору еще раз спасибо. И сделайте пожалуйста курс видео по Django, с таким подходом как у вас материала мало в инете

    • @selfedu_rus
      @selfedu_rus  4 ปีที่แล้ว +4

      Спасибо, насчет Django думаю, но в любом случае после нейронных сетей :)

    • @YGNETATEL_3000
      @YGNETATEL_3000 ปีที่แล้ว

      @@selfedu_rus 3:38 самое сложное из всего цикла про Flask . написать то я написал и все работает , ничего так и не понял из твоего объяснения

    • @user-ej2fb5vw7x
      @user-ej2fb5vw7x หลายเดือนก่อน

      @@YGNETATEL_3000 Да, мне тоже чёт как-то сложновато на этом моменте было. До сих пор не понимаю

  • @MrWeatherstorm
    @MrWeatherstorm 11 หลายเดือนก่อน +2

    Чувак, спасибо что заморочился и все так подробно расписал. Респект!

  • @nikifedin
    @nikifedin 2 ปีที่แล้ว +1

    Спасибо большое, пишем с ребятами свой ctf-движок, благодаря вашим урокам!

  • @andruhaz
    @andruhaz 2 ปีที่แล้ว +6

    Да, кстати, учусь по той же самой методике - переписываю код. 5 строк написал- 3ошибки всплыли. 3 дня перечитывания документации к фреймворку и гугления на Стаковерфлоу и в 100500 подобных местах, а по факту типа название функции перепутал пока писал либо идентация не там.😂 +Еще курс по ООП перечитал/пересмотрел))). Мдя. Уже сюда было дойти не так просто)))

  • @Sirlorddd
    @Sirlorddd 4 ปีที่แล้ว +4

    автор красава ) все понятно объясняется и по порядку спс )))))

  • @sharker1969
    @sharker1969 3 ปีที่แล้ว +3

    Спасибо, ты очень хорошо объясняешь! 👍🔥

    • @user-tk5xm4ox2c
      @user-tk5xm4ox2c ปีที่แล้ว

      Шутите?)

    • @sharker1969
      @sharker1969 ปีที่แล้ว

      @@user-tk5xm4ox2c честно говоря, спустя 2 года я уже не помню - шутил или не
      Ну скорее всего нет)

  • @k1ll3rsyst3m
    @k1ll3rsyst3m ปีที่แล้ว +4

    Понимаю, курсам два года, но в FDataBase очень грубая ошибка: идёт запрос с форматированием строки, а это может привести к sql-инъекции, лучше делать что-типа ("SELECT * FROM users WHERE id = ?", user_id)

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

      Это да, согласен!

  • @SOVAM_SAS
    @SOVAM_SAS ปีที่แล้ว +4

    У меня не происходит редирект при авторизации. Искал причину - не нашел, так как обработчик не выдает никаких ошибок. Ради эксперимента поменял метод запроса с POST на GET и он выдал werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
    KeyError: 'email'. На всякий случай проверил написание email на странице, в базе данных - везде, но ничего не помогло. Не могу понять в чём ошибка? Даже скопировав файлы с гитхаба проблему не решил. Причем функция регистрации работает правильно - данные добавляются в БД.

  • @orthodox-chanel
    @orthodox-chanel ปีที่แล้ว +2

    Намучался пытаясь повторить авторизацию но все время что-то вылетало и не поулчалось, перепробовал кучу всего, некоторые варианты даже начинали работать а потом переставали. В итоге опытным путем я пришел к тому, что извлекая id пользователя функцией current_user.get_id() нужно преобразовывать id в строковый формат. Не знаю с чем это связанно, может psycopg2 может сам модуль отвечающий за логирование преобразует в инт или что-то еще но вот из-за этого мучался долго...

  • @donfedor007
    @donfedor007 3 ปีที่แล้ว +1

    Интересная тема! осталось придумать как использовать в своём проекте! Спасибо за уроки!

  • @nadyamoscow2461
    @nadyamoscow2461 3 ปีที่แล้ว +1

    Спасибо, отличное объяснение

  • @user-hn7gb9ej9d
    @user-hn7gb9ej9d 4 ปีที่แล้ว +2

    Спасибо!

  • @ve2376
    @ve2376 2 ปีที่แล้ว +3

    Вроде все максимально понятно казалось на первый вгляд, но в какой-то момент на практите понял, что полностью запутался, где мы работаем с какими методами и как они взаимодействуют. Наши самопписные и вшитые flask_loginовские.
    В частности, self.__user['id'], откуда 'id', если на выходе(не знаю как в sqlite), я тестирую с Mysql, получаем не словарь, а кортеж.

    • @yanalsheuski263
      @yanalsheuski263 2 ปีที่แล้ว

      мы не с кортежа получаем данные, а из бд, где параметр id формируется при создании записи

    • @dmitriydolgopolov5212
      @dmitriydolgopolov5212 ปีที่แล้ว

      Разные СУБД возвращают данных в разных структурах. Если в примере с видео SQLite возвращает словарь, то обращение к данным в нём происходит по ключу - т.е. self.__user['id'], где id - название поля в таблице. Если же СУБД возвращает данные в кортеже, то к данным нужно обращаться по индексу, т.е. self.__user[0] - где 0 - порядковый номер атрибута "Идентификатор" в таблице.

  • @law_gov
    @law_gov ปีที่แล้ว +1

    А как у вас реализован механизм при котором после закрытия браузера у вас авторизация слетает и нужно по новой авторизоваться ?

  • @user-cm1ri1sn2u
    @user-cm1ri1sn2u ปีที่แล้ว +1

    возвращаю в get_id self.__user['id'] в исходном виде (integer) и всё прекрасно работает. Для чего нужно конвертировать возвращаемое значение в str?

  • @yarik83men51
    @yarik83men51 3 ปีที่แล้ว +1

    Спасибо за труды. Но копи паст не очень смотрится, если потратить на 5 мин. дольше прописать.

  • @raven_n7413
    @raven_n7413 ปีที่แล้ว +1

    Вопрос, а почему при обращении к методу fromDB класса UserLogin после класса ставим скобки? UserLogin().fromDB(user_id, dbase)

    • @user-tk5xm4ox2c
      @user-tk5xm4ox2c ปีที่แล้ว +1

      команда UserLogin() создает объект класса UserLogin. После чего, мы вызываем его метод fromDB(user_id, dbase) с передачей в него аргументов user_id и dbase.

  • @55kl89
    @55kl89 2 ปีที่แล้ว +1

    AttributeError: 'NoneType' object has no attribute 'is_active'

  • @VaeV1ct1s
    @VaeV1ct1s 2 ปีที่แล้ว +1

    Добрый день! очень помогли ваши видео, уже второй проект заканчиваю по ним) Подскажите пожалуйста, а функция load_user, срабатывая при каждом запросе к серверу(у меня срабатывает по 10 раз, при переходе на страницу, потому что срабатывает от подгрузки CSS и JS), не загружает сервер?

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว

      это плохо, если так, нужно поставить флаг, если уже отработала, то следующие разы функции ничего не делать

    • @VaeV1ct1s
      @VaeV1ct1s 2 ปีที่แล้ว

      @@selfedu_rus как то можно отфильтровать это?

  • @mirriyastia7041
    @mirriyastia7041 2 ปีที่แล้ว +1

    У меня почему-то после закрытия страницы и даже перезапуска программы авторизация сохраняется, хотя я не ставил галочку "Запомнить меня".

    • @user-tk5xm4ox2c
      @user-tk5xm4ox2c ปีที่แล้ว +1

      Все верно, так как сессия у Вас остается неизменной. Начните новую сессию и все будет хорошо. Как я понимаю, здесь функционал для "галочки" не про писан.

  • @Yanis0071
    @Yanis0071 3 ปีที่แล้ว +2

    Автор спасибо за труд. Подскажите кто сталкивался и как проще решить проблему асинхронности. Я столкнулся с проблемой когда в момент добовления нового пользователя в БД облаке следом происходит отпавка письма с линком для активации пользователя. Так все это занимает несколько секунд, в этот моент return еще не вызван и пользоватль не может получить темплейт и видит подвисания в браузере. Возмоно ли как то вызвать функцию отвравки письма и не ждать пока дб отвработает и вернуть пользователю его страницу сразу после валидации его данных?

    • @user-fd8yb4xw1v
      @user-fd8yb4xw1v 3 ปีที่แล้ว

      Привет, Если правильно я понимаю после добавления в базу записи ты ждешь от нее отклика с шаблоном… по пробуй сделать так… заранее подготовить стандартный шаблон при регистрации новых пользователей и сразу его возвращай. Возможно я не прав, но задержка с стороны БД происходит из-за синхронизации ее отдельных кусочков с остальными.

  • @user-zg6im8el2c
    @user-zg6im8el2c 2 ปีที่แล้ว +2

    обьяснение автора по django на порядок понятнее и попроще здесь просто куски кода.

  • @user-gu4ez5sd7h
    @user-gu4ez5sd7h ปีที่แล้ว +2

    Ошибка получения данных near "@mail": syntax error как ошибку исправить? гуглил. чатГОПОТА тое юзал. Никто не знает. Хелп плиз

    • @ai_h8_you
      @ai_h8_you ปีที่แล้ว

      как решил вопрос?

    • @mr_alexcey
      @mr_alexcey 8 หลายเดือนก่อน

      @@ai_h8_you та же ошибка, не пойму в чем причина

  • @Dragonoid_369_4
    @Dragonoid_369_4 16 วันที่ผ่านมา +1

    Потерял наверное момент, но никак не могу понять в какой момент формируется user_id который мы передаем в login_manager. Как туа привязывается первая запись айдишника после входа в учетну. запись

  • @xores26
    @xores26 ปีที่แล้ว +1

    Как сделать редирект на страницу авторизации, если пользователь не авторизован?

    • @xores26
      @xores26 ปีที่แล้ว +1

      Нашел в следующем уроке, спасибо

  • @qa-proka4
    @qa-proka4 4 ปีที่แล้ว +1

    Самые понятные уроки, НООООООООО "ВОТ ТУТ ТАКОЙ HTML", и чтобы реально понять нужно с экрана его переписывать в ручную... можете пожалуйста может ссылку на гит крепить? ибо невозможно(

    • @selfedu_rus
      @selfedu_rus  4 ปีที่แล้ว +2

      Спасибо, в 16-м и 17-м занятиях под видел ссылка на файлы проекта

    • @qa-proka4
      @qa-proka4 4 ปีที่แล้ว

      Спасибо! Но уроки единственные на ютубе! не останавливайтесь!

  • @fyndjey7820
    @fyndjey7820 3 ปีที่แล้ว

    после того как ввожу правильные данные он просто перезагружается

  • @user-im4jl5wd7l
    @user-im4jl5wd7l 4 ปีที่แล้ว

    у вас есть этот же материал но уже с использованием SQL Alchemy?

    • @selfedu_rus
      @selfedu_rus  4 ปีที่แล้ว

      вроде последнее видео, где рассказываю как подключить SQL Alchemy

  • @trnt1166
    @trnt1166 4 ปีที่แล้ว

    TypeError: load_user() missing 1 required positional argument: 'user_id'
    Выбрасывает в ошибку, не могу понять в чем дело.

    • @selfedu_rus
      @selfedu_rus  4 ปีที่แล้ว

      В программе идет так:
      @login_manager.user_loader
      def load_user(user_id):
      print("load_user")
      return UserLogin().fromDB(user_id, dbase)
      здесь user_id обязательный аргумент, и вы его где-то не указываете

    • @trnt1166
      @trnt1166 4 ปีที่แล้ว +2

      @@selfedu_rus нашел косяк. Я функцию load_user() передавал зачем-то self, user_id.
      Кстати за курс спасибо, самый информативный!

  • @MrMikhailDJ
    @MrMikhailDJ 2 ปีที่แล้ว

    А как ограничить доступ к страницам для определённого пользователя?

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว +1

      только через авторизацию

    • @MrMikhailDJ
      @MrMikhailDJ 2 ปีที่แล้ว

      @@selfedu_rus странно, просто в вузе задали сделать вот так: "Одному из пользователей, прошедшему аутентификацию разрешается выполнять только второй запрос, второму - только первый. Реализовать аутентификацию с помощью декоратора". И непонятно пока что как различать одного юзера от другого)

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว +1

      @@MrMikhailDJ аутентификация - это и есть регистрация (авторизация)

  • @code_la
    @code_la 3 ปีที่แล้ว

    можно ведь без дополнительных классов и файлов например во так
    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):
    login_user(user)

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +3

      Можно. Можно даже программировать, не используя ООП :)

    • @code_la
      @code_la 3 ปีที่แล้ว

      @@selfedu_rus спасибо вам, контент отличный! У меня есть вопрос, был бы благодарен если поможете разобраться

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +2

      @@code_la я стараюсь отвечать на конкретные вопросы, если знаю ответ )

  • @nikolazzzer7087
    @nikolazzzer7087 ปีที่แล้ว +2

    Это просто звездец! Все запутано ничего не понятно минус нервы Не советую смотреть ничего не получиться

    • @xumpocmb-404
      @xumpocmb-404 11 หลายเดือนก่อน

      я вручную написал авторизацию и регистрацию. потом решил посмотреть видео из этого курса. это какой то пиздец. решил повторить код из видео - ничерта не работает, одну ошибку правишь - вторая вылезает. официальная документация по flask login тоже ущербная

  • @xumpocmb-404
    @xumpocmb-404 11 หลายเดือนก่อน

    сколько же говнокода и костылей тут, удивление - как это еще работает.

  • @user-oj7fg1xm1w
    @user-oj7fg1xm1w 4 หลายเดือนก่อน

    ну скидывай файлы пожалуйста. Тоесть чо бы посмотреть один урок, я должен зайти на предыдущий, а там еще на предыдющий. Издвеаешься что ли

  • @Senator93rus
    @Senator93rus 4 ปีที่แล้ว +1

    Спасибо за ваш труд, конечно
    Но уроки ужасные, Вы просто куски кода вставляете и все
    Невозможно воспринимать информацию
    При том, что я хоть немного понимаю, что к чему

  • @Stereophoto
    @Stereophoto หลายเดือนก่อน +1

    если поймали ошибку Ошибка в БДnear "@mail": syntax error
    при выполнении
    getUserByEmail(self,email)
    нужно изменить запрос на такой:
    self.__cur.execute("SELECT * FROM users WHERE email = ?", (email,))