Бекенд на Django, Урок 4: OAuth

Поделиться
HTML-код
  • Опубликовано: 9 фев 2025
  • 00:00 Как выглядит проверка аутентификации в Django через классы REST Framework
    03:36 Аутентификация и Авторизация, что это и чем они отличаются
    06:37 Пакеты для social auth
    09:08 Установка и настройка Python Social Auth
    13:00 Как устроен OAuth
    18:03 Настраиваем OAuth2 через Github, регистрация приложения в Github
    22:35 Делаем веб-страницу для кнопки аутентификации через Github
    24:47 Добавляем function based view для отдачи html страницы
    25:38 Делаем урл для вью в urls.py
    26:40 Тестируем OAuth
    27:31 Проверяем созданного пользователя в админке джанго
    28:26 Что сегодня сделали

Комментарии • 122

  • @Sergey-cz7ym
    @Sergey-cz7ym Год назад +13

    После первой авторизации через github, при последующих попытках авторизоваться, вылазила страница Page not found (404). Полдня ковырялся пытаясь найти что же я сломал. Оказалось что надо на своей странице в гитхабе разлогинить свою апликашку (нажать: Revoke all user tokens) и после этого авторизация через гит снова заработает. Может кому-нибудь пригодится

    • @mithlars
      @mithlars Год назад

      Та же ошибка, но решение не помогло

    • @Sergey-cz7ym
      @Sergey-cz7ym Год назад

      @@mithlars я уже не помню подробностей, но кажется ошибка была изза того что если уже авторизован, то повторная авторизация вызывает ошибку, вроде как то так получалось кажется. Поэтому после отмены всех разршений (отмены всех рабочих токенов) ошибка пропадала до сдедующей авторизации

    • @mithlars
      @mithlars Год назад

      @@Sergey-cz7ym Видтмо, у меня в другом причина. Спасибо.

    • @alexeyni722
      @alexeyni722 Год назад +1

      @@mithlars Не знаю, насколько актуально будет, тоже не мог долго разобрать с этим
      оказалось в SECRET KEY допустил лишний пробел, при копировании
      надеюсь кому поможет:)

    • @КошкинДом-д4н
      @КошкинДом-д4н 9 месяцев назад

      @@mithlars нашли как исправить ошибку?

  • @EctxD
    @EctxD 2 года назад +11

    Один из самых лучших курсов в интернете! Не бросай, на твоем ролике я уверен еще вырастет не малое поколение бэкендеров.

  • @serge2033
    @serge2033 3 года назад +56

    спасибо большое за твои полезные плейлисты! в джанго 4 выпилили "from django.conf.urls import url" теперь нужно использовать 'from django.urls import path, include, re_path' и в urlpatterns писать 're_path('', include('social_django.urls', namespace='social')),' . спасибо ещё раз, очень полезно!

    • @iliag7068
      @iliag7068 3 года назад +1

      да, тоже пришлось потыкаться немного)

    • @RomanBog
      @RomanBog Год назад

      Спасибо, помогло

    • @BELLA_VESTA
      @BELLA_VESTA Год назад

      Спасибо огромное!

    • @devidbrown8176
      @devidbrown8176 Год назад

      Благодарю Вас, добрый ЧЕЛОВЕК!)

    • @danik_hrenkov
      @danik_hrenkov 11 месяцев назад

      Можно и просто path

  • @Developer_python_
    @Developer_python_ Год назад

    Я думаю ты самый топовый по джанго в русс ютюбе. Спасибо!

  • @maksatttologonov9432
    @maksatttologonov9432 4 года назад +6

    спасибо большое тебе, лучше курса в ютубе нету я вас уверяю, еще раз спасибо

  • @МаратАғай
    @МаратАғай Год назад +1

    Шик-блеск! подключил еще и яндекс, у них это сделано очень доступно и красиво) спасибо за уроки!

  • @aleksei_bauman
    @aleksei_bauman 11 месяцев назад +3

    Для тех, кто работает в 2024 с Django версией 4 - функцию url из conf.urls убрали и заменили на "from django.urls import re_path"

  • @pavelg9855
    @pavelg9855 4 года назад

    Самое толковое объяснение различия аутентификации и авторизации, что я встречал.

  • @eugenebybin6403
    @eugenebybin6403 2 года назад

    Алексей, спасибо за уроки, особенно ценно, что показываешь весь процесс (возникающие ошибки и их решение), а не просто сразу рабочий код

  • @navin2739
    @navin2739 4 года назад +1

    ПРОСТО СПАСИБО ТЕБЕ, я на эмоциях счастья
    ВСЕ РАБОТАЕТ
    ААААААААААААААА
    СПАСИБО
    Я ПРОСТО РАДУЮСЬ
    (не сарказм)
    :)

  • @vladimirbondarenko3281
    @vladimirbondarenko3281 4 года назад

    Спасибо. Отличная грамотная подача материала. Надеемся на продолжение.

  • @srgtmn
    @srgtmn 3 года назад

    Исключительно, возможности о которых подозревал по полочкам.

  • @nikulin7944
    @nikulin7944 3 года назад +1

    Спасибо, все работает! Отлично! )))

  • @kgaussss7299
    @kgaussss7299 4 года назад +5

    На 1.37 стало очень смешно, когда через минут 30 сам догадался, что был залогинен под admin)))

    • @antonsachuk615
      @antonsachuk615 3 года назад +1

      ты красавчик - спас людям время )

    • @deviani4415
      @deviani4415 8 месяцев назад

      смотрю курс в 2024, спасибо за коммент, очень помогло))

  • @maksatttologonov9432
    @maksatttologonov9432 4 года назад +1

    все идеально, спасибо большое

  • @Ярославв-у4ю
    @Ярославв-у4ю 4 года назад

    Видео клас. Всем рекомендую посмотреть

  • @jamjam3337
    @jamjam3337 11 месяцев назад

    спасибо!😎

  • @PhantomO799
    @PhantomO799 4 года назад

    Спасибо за видео, очень помог

  • @dodokwak
    @dodokwak 4 года назад +1

    особое мерси за замечание на 7:50,т.к. я одно время совсем запуталась, наблюдая за имплементацией этих features и удивляясь, почему так сложно.

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  4 года назад +2

      Даа) Я тоже сначала начал с ним разбираться , потом дошло что мне не это надо )

  • @dizzivoneverec2737
    @dizzivoneverec2737 3 года назад

    Пишу комментарий чтобы по быстрей вышли новые ролики))

  • @aminaisaeva7353
    @aminaisaeva7353 2 года назад

    Thanks 🙏🏻

  • @Developer_python_
    @Developer_python_ Год назад

    У меня с постгресом давало юзеру доступ к ендпоинту пока не удалил сесию

  • @navin2739
    @navin2739 4 года назад

    я Google подключал и запарывался на маленькой ерунде, а ты взял и помог.
    времени много потратил

  • @ilyachudakov7944
    @ilyachudakov7944 2 года назад

    Блин, ну почму нельзя ставить многолайков!

  • @aramsimonyan9067
    @aramsimonyan9067 4 года назад +3

    Привет Сениор Помидор,у тебя отличные видео,но я хотел-бы тебе сказать,что многие,которые учат python django,не умеют работать нормально с API и с REACT-ом или с другими фронтенд framework-ами,не мог бы ты записать видео про все это, или после видео с django, записать,что-то вроде React + Django?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  4 года назад

      К сожалению, совсем не представляю как работать с React , а также с любым другим фронтенд фреймворком . Никогда этим не занимался профессионально , везде где я работал , а это уже не мало компаний, везде был какой-то фронтенд разработчик , который все делал сам и мешал мне учить фронтенд )

    • @aramsimonyan9067
      @aramsimonyan9067 4 года назад

      Senior Pomidor Developer а будет-ли объяснения работы с api?я просто одно не могу понять,везде,гле написано django developer,везде нужно Javascript.

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  4 года назад +2

      Про API ещё много будет , следующий выпуск будет подробное тестирование и разбор API на REST. По поводу работы , много где хотят js от бекенд разработчиков , но много где есть разделение в компании на фронтенд и бекенд программистов , мне всегда на такие везло. Так или иначе, сложно одинаково хорошо владеть и тем и другим. По моему, лучше что-то одно хорошо научиться делать.

    • @aramsimonyan9067
      @aramsimonyan9067 4 года назад

      Senior Pomidor Developer абсолютно согласен,еще раз спасибо за такие уроки!

    • @timohahahehehe
      @timohahahehehe 3 года назад

      @@SeniorPomidorDeveloper здравствуй, учу C++( просто потому что нравится), но хочу попробовать бэкенд(на питоне скорее всего). Действительно ли мне нужн о начать с html, css и js(с каждым из них максимально базово знаком)? Или начать с python, а html, css и js потом по ходу обучения подучить?

  • @sashapaliy8909
    @sashapaliy8909 4 года назад +2

    клас

  • @artemunix5223
    @artemunix5223 Год назад

    с твитером никаких проблемнету я по книге делал все работает ты просто отправляешь рандомный текст и подключаешь oauth

  • @luchanos
    @luchanos 3 года назад +3

    Всё сделал точь-в -точь, падает ошибка No module named 'django.contrib.backends' . ОСобо ничего не нагуглил, пока не знаю в чём проблема.

  • @ZaneAmmedler
    @ZaneAmmedler 7 месяцев назад

    Лайк однозначно🫡

  • @МурадАхмедов-ч1с

    а как добавить OpenID Connect 1.0?

  • @vladvlad3544
    @vladvlad3544 2 года назад

    А по архитектуре DRF придерживается таких же принципов, что и Django? Т.е. например в нашем случае, все, что связано с юзерами - похорошему нужно перенести в отдельное приложение?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  2 года назад

      DRF не связана с архитектурой. Это просто набор классов для использования там, где хочешь.
      Также надо , к примеру, класть их сериализаторы в класс serializers.py, но это не для архитектуры, а просто чтобы самому не запутаться.

    • @vladvlad3544
      @vladvlad3544 2 года назад

      @@SeniorPomidorDeveloper понял, спасибо!

  • @artemunix5223
    @artemunix5223 Год назад

    расскажешь как микросервисы(микромонолиты) друг с другом подружить давать им пермишены и тд?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Год назад

      Да в принципе также. На одном делаем api на другом к нему requests. Ну и авторизация по токену. Это в моих курсах пока не было. В остальном все тоже самое и пермишены как везде , такие же

    • @artemunix5223
      @artemunix5223 Год назад

      @@SeniorPomidorDeveloper супер если покажешь :D

  • @antonsachuk615
    @antonsachuk615 3 года назад

    Подскажи, на 25 минуте ты делаешь def auth(request) return (request, 'oauth.html) - но ты говоришь, что зачем создавать приложение ради 2 строчек кода. Не совсем уловил, что за приложение ?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  3 года назад +1

      Тут как обычно путаница в этих терминах . Я тут имею ввиду Django app , то есть специальную папку внутри Django project . По этому сделал эту функцию просто во view в приложении store

    • @antonsachuk615
      @antonsachuk615 3 года назад

      @@SeniorPomidorDeveloper очень понравилась идея твоя с ДЗ. Надеюсь дальше сможешь развивать. Возможно ли ещё самому потренироваться с аутификацией с локальным сервером ? Твиттер я так понимаю пролетает, так как должен быть реальный сервер. Какие есть аналоги?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  3 года назад +1

      Да вариантов масса python-social-auth.readthedocs.io/en/latest/intro.html можно пробовать с любым из них , начать с самых популярных типа fb или vk. Может инста . Не могу сказать с кем будет проще, очень давно ими не занимался

    • @antonsachuk615
      @antonsachuk615 3 года назад

      @@SeniorPomidorDeveloper сделал с VK. Намучался )) вроде с facebook и инстой нужен не локальный сервер

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  3 года назад +1

      Супер! Ну а дальше никто не мешает захостить своё приложение на сервере ! Хочу про это записать видео этим летом

  • @mrsanchez860
    @mrsanchez860 4 года назад

    Здравствуйте, senior pomidor, хотел задать вопрос по бэку, не касающийся этой темы(OAuth). Условно у меня есть задача: определить тип входящих данных и в зависимости от типа вызвать логику. Есть класс с тремя методами(метод определения данных и два метода логики). Так как правильнее всего будет их вызывать? У меня есть несколько вариантов -
    1. Создать файл(подобие апи) и по очереди вызвать сначала определение типа данных и, в зависимости от результата, вызывать логику, а во view файле вызывать апи.
    2. Cоздать в классе 4й метод, в котором будет вызываться определение и нужная логика, а во view вызвать этот 4й метод.
    3. Просто прописать всё необходимое во view.
    Касательно 2го варианта - слышал я, что существует принцип единой ответственности и наверное он(2й вариант) нарушает данный принцип, но я не уверен). Просто хотелось бы знать как будет наиболее правильно.

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  4 года назад

      Сложно что-то посоветовать , я не знаю что там за классы и как они выглядят.. Ну конечно нужно делать с максимальным разделением ответственности, создать дополнительный модуль (файл), в нем класс типа OrderService или BookService , который будет обслуживать эти сущности. И обращаться из вью к этому сервисному классу, вызывать его метод какой-то. Внутри этого класса тоже все разбить по функциям, чем они меньше тем лучше. Во вью хорошо бы никакой логики не делать. То есть более всего подходит вариант 1 , я думаю.

    • @mrsanchez860
      @mrsanchez860 4 года назад

      @@SeniorPomidorDeveloper спасибо

  • @jimlabable
    @jimlabable 3 года назад +1

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

    • @jimlabable
      @jimlabable 3 года назад +1

      в общем гитхаб создает профиль в User social auths, но не создает пользователя. Почему пока не ясно, Google создает пользователя и профиль. Те логиниться с гитхаба получается, но в админке пользователя не создается.

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  3 года назад

      ☹️

    • @evgenymarshalov
      @evgenymarshalov 2 года назад +1

      У меня тоже самое

    • @СтепанГилёв-х7я
      @СтепанГилёв-х7я 2 года назад +2

      нужно изначально заходить в git с другого браузера/где не входил админ,иначе он подумает что у админа такой гит

  • @Денис-ч4б9к
    @Денис-ч4б9к 7 месяцев назад

    У меня доступ открыт и все тут. Я разлогинил всех пользователей базы. Все равно доступ открыт. Что еще попробовать сделать?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  7 месяцев назад

      Что значит доступ открыт? Если неавторизованные пользователи могут обращаться к энднойнтам api, значит надо смотреть в классы авторизации.
      Чтобы было проще понять, можно приложить скриншот и написать в нашу группу в телеграмме, ссылка в профиле

  • @montecristo31
    @montecristo31 2 года назад +9

    если шо, теперь SOCIAL_AUTH_POSTGRES_JSONFIELD = True, НУЖНО ПЕРЕИМНОВАТЬ В SOCIAL_AUTH_POSTGRES_JSONFIELD_ENABLED = True.

  • @ataikemelov9678
    @ataikemelov9678 2 года назад

    помогите пожалуйста. прошел весь этот курс, хотел опять войти через url .../auth/, гитхаб после редиректа на сервер выдает ошибку 'The current path, accounts/profile/, didn’t match any of these.'

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  2 года назад

      Напишите в группу в телегу , ссылка в профиле

  • @catswill
    @catswill 3 года назад

    жду новые видео, чтобы посмотреть на чудесные кудряшки

  • @cherkasovv4137
    @cherkasovv4137 2 года назад

    Привет! А есть исходники на гитхабе ?

  • @yarik83men51
    @yarik83men51 3 года назад

    Спасибо, не могу разобраться с авторизацией JWT или через Token.

  • @zubrdens
    @zubrdens 4 года назад

    А как передать json в шаблон?

  • @MaximVoronkov-fh3ib
    @MaximVoronkov-fh3ib 2 года назад +1

    помогите плиз!!! уже всё испробовал! постоянно вот такая ошибка ModuleNotFoundError: No module named 'social_django.urls'
    после добавления re_path('', include('social_django.urls', namespace='social'))

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  2 года назад

      Напишите в группу в телеграмме, ссылка в профиле

    • @Pavel-er4hy
      @Pavel-er4hy Год назад

      from django.contrib import admin
      from django.urls import path
      from rest_framework.routers import SimpleRouter
      from store.views import BookViewSet
      from django.conf.urls import url
      from django.urls import include
      router = SimpleRouter()
      router.register(r'book',BookViewSet)
      urlpatterns = [
      path('admin/', admin.site.urls),
      url('', include('social_django.urls', namespace='social')),
      ]
      urlpatterns += router.urls
      Так работает

    • @Pavel-er4hy
      @Pavel-er4hy Год назад

      from django.contrib import admin
      from django.urls import path
      from rest_framework.routers import SimpleRouter
      from store.views import BookViewSet,auth
      from django.urls import path, include, re_path
      from django.urls import include
      router = SimpleRouter()
      router.register(r'book',BookViewSet)
      urlpatterns = [
      path('admin/', admin.site.urls),
      # url('', include('social_django.urls', namespace='social')),
      re_path('', include('social_django.urls', namespace='social')),
      path('auth/', auth)
      ]
      urlpatterns += router.urls
      А в конце видео так. Вверху в этом чате указан ответ.
      re_path('', include('social_django.urls', namespace='social')),

    • @AlexeyShilyaev
      @AlexeyShilyaev Год назад +1

      С тем же столкнулся, оказалось, что я не поставил запятую, после добавления строки 'social_core.backends.github.GithubOAuth2'

  • @ДаниилКорчемкин-г9щ

    Если кому поможет ошибку выдаёт при написание 'social_djaongo ' в приложении
    Напишите в утилетах вместо force_text , force_str

    • @maximkorchemkin8132
      @maximkorchemkin8132 Год назад

      Красава чувак, респект тебе. 👍👍👍

  • @smokibits4365
    @smokibits4365 2 года назад

    Ya pereopredelil username na email i pri autorizacii cherez github, on autoriziruetsya bez imeni)