Бекенд на 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 Что сегодня сделали
После первой авторизации через github, при последующих попытках авторизоваться, вылазила страница Page not found (404). Полдня ковырялся пытаясь найти что же я сломал. Оказалось что надо на своей странице в гитхабе разлогинить свою апликашку (нажать: Revoke all user tokens) и после этого авторизация через гит снова заработает. Может кому-нибудь пригодится
Та же ошибка, но решение не помогло
@@mithlars я уже не помню подробностей, но кажется ошибка была изза того что если уже авторизован, то повторная авторизация вызывает ошибку, вроде как то так получалось кажется. Поэтому после отмены всех разршений (отмены всех рабочих токенов) ошибка пропадала до сдедующей авторизации
@@Sergey-cz7ym Видтмо, у меня в другом причина. Спасибо.
@@mithlars Не знаю, насколько актуально будет, тоже не мог долго разобрать с этим
оказалось в SECRET KEY допустил лишний пробел, при копировании
надеюсь кому поможет:)
@@mithlars нашли как исправить ошибку?
Один из самых лучших курсов в интернете! Не бросай, на твоем ролике я уверен еще вырастет не малое поколение бэкендеров.
спасибо большое за твои полезные плейлисты! в джанго 4 выпилили "from django.conf.urls import url" теперь нужно использовать 'from django.urls import path, include, re_path' и в urlpatterns писать 're_path('', include('social_django.urls', namespace='social')),' . спасибо ещё раз, очень полезно!
да, тоже пришлось потыкаться немного)
Спасибо, помогло
Спасибо огромное!
Благодарю Вас, добрый ЧЕЛОВЕК!)
Можно и просто path
Я думаю ты самый топовый по джанго в русс ютюбе. Спасибо!
спасибо большое тебе, лучше курса в ютубе нету я вас уверяю, еще раз спасибо
Шик-блеск! подключил еще и яндекс, у них это сделано очень доступно и красиво) спасибо за уроки!
Для тех, кто работает в 2024 с Django версией 4 - функцию url из conf.urls убрали и заменили на "from django.urls import re_path"
Самое толковое объяснение различия аутентификации и авторизации, что я встречал.
Спасибо !
Алексей, спасибо за уроки, особенно ценно, что показываешь весь процесс (возникающие ошибки и их решение), а не просто сразу рабочий код
ПРОСТО СПАСИБО ТЕБЕ, я на эмоциях счастья
ВСЕ РАБОТАЕТ
ААААААААААААААА
СПАСИБО
Я ПРОСТО РАДУЮСЬ
(не сарказм)
:)
Супер !!
Спасибо. Отличная грамотная подача материала. Надеемся на продолжение.
Спасибо! Будет обязательно
Исключительно, возможности о которых подозревал по полочкам.
Спасибо, все работает! Отлично! )))
На 1.37 стало очень смешно, когда через минут 30 сам догадался, что был залогинен под admin)))
ты красавчик - спас людям время )
смотрю курс в 2024, спасибо за коммент, очень помогло))
все идеально, спасибо большое
Видео клас. Всем рекомендую посмотреть
спасибо!😎
Спасибо за видео, очень помог
особое мерси за замечание на 7:50,т.к. я одно время совсем запуталась, наблюдая за имплементацией этих features и удивляясь, почему так сложно.
Даа) Я тоже сначала начал с ним разбираться , потом дошло что мне не это надо )
Пишу комментарий чтобы по быстрей вышли новые ролики))
Thanks 🙏🏻
У меня с постгресом давало юзеру доступ к ендпоинту пока не удалил сесию
я Google подключал и запарывался на маленькой ерунде, а ты взял и помог.
времени много потратил
Блин, ну почму нельзя ставить многолайков!
Привет Сениор Помидор,у тебя отличные видео,но я хотел-бы тебе сказать,что многие,которые учат python django,не умеют работать нормально с API и с REACT-ом или с другими фронтенд framework-ами,не мог бы ты записать видео про все это, или после видео с django, записать,что-то вроде React + Django?
К сожалению, совсем не представляю как работать с React , а также с любым другим фронтенд фреймворком . Никогда этим не занимался профессионально , везде где я работал , а это уже не мало компаний, везде был какой-то фронтенд разработчик , который все делал сам и мешал мне учить фронтенд )
Senior Pomidor Developer а будет-ли объяснения работы с api?я просто одно не могу понять,везде,гле написано django developer,везде нужно Javascript.
Про API ещё много будет , следующий выпуск будет подробное тестирование и разбор API на REST. По поводу работы , много где хотят js от бекенд разработчиков , но много где есть разделение в компании на фронтенд и бекенд программистов , мне всегда на такие везло. Так или иначе, сложно одинаково хорошо владеть и тем и другим. По моему, лучше что-то одно хорошо научиться делать.
Senior Pomidor Developer абсолютно согласен,еще раз спасибо за такие уроки!
@@SeniorPomidorDeveloper здравствуй, учу C++( просто потому что нравится), но хочу попробовать бэкенд(на питоне скорее всего). Действительно ли мне нужн о начать с html, css и js(с каждым из них максимально базово знаком)? Или начать с python, а html, css и js потом по ходу обучения подучить?
клас
с твитером никаких проблемнету я по книге делал все работает ты просто отправляешь рандомный текст и подключаешь oauth
Всё сделал точь-в -точь, падает ошибка No module named 'django.contrib.backends' . ОСобо ничего не нагуглил, пока не знаю в чём проблема.
senior к seniorу зашел
@@ДанилКропива ахахаахх)))
Лайк однозначно🫡
а как добавить OpenID Connect 1.0?
А по архитектуре DRF придерживается таких же принципов, что и Django? Т.е. например в нашем случае, все, что связано с юзерами - похорошему нужно перенести в отдельное приложение?
DRF не связана с архитектурой. Это просто набор классов для использования там, где хочешь.
Также надо , к примеру, класть их сериализаторы в класс serializers.py, но это не для архитектуры, а просто чтобы самому не запутаться.
@@SeniorPomidorDeveloper понял, спасибо!
расскажешь как микросервисы(микромонолиты) друг с другом подружить давать им пермишены и тд?
Да в принципе также. На одном делаем api на другом к нему requests. Ну и авторизация по токену. Это в моих курсах пока не было. В остальном все тоже самое и пермишены как везде , такие же
@@SeniorPomidorDeveloper супер если покажешь :D
Подскажи, на 25 минуте ты делаешь def auth(request) return (request, 'oauth.html) - но ты говоришь, что зачем создавать приложение ради 2 строчек кода. Не совсем уловил, что за приложение ?
Тут как обычно путаница в этих терминах . Я тут имею ввиду Django app , то есть специальную папку внутри Django project . По этому сделал эту функцию просто во view в приложении store
@@SeniorPomidorDeveloper очень понравилась идея твоя с ДЗ. Надеюсь дальше сможешь развивать. Возможно ли ещё самому потренироваться с аутификацией с локальным сервером ? Твиттер я так понимаю пролетает, так как должен быть реальный сервер. Какие есть аналоги?
Да вариантов масса python-social-auth.readthedocs.io/en/latest/intro.html можно пробовать с любым из них , начать с самых популярных типа fb или vk. Может инста . Не могу сказать с кем будет проще, очень давно ими не занимался
@@SeniorPomidorDeveloper сделал с VK. Намучался )) вроде с facebook и инстой нужен не локальный сервер
Супер! Ну а дальше никто не мешает захостить своё приложение на сервере ! Хочу про это записать видео этим летом
Здравствуйте, senior pomidor, хотел задать вопрос по бэку, не касающийся этой темы(OAuth). Условно у меня есть задача: определить тип входящих данных и в зависимости от типа вызвать логику. Есть класс с тремя методами(метод определения данных и два метода логики). Так как правильнее всего будет их вызывать? У меня есть несколько вариантов -
1. Создать файл(подобие апи) и по очереди вызвать сначала определение типа данных и, в зависимости от результата, вызывать логику, а во view файле вызывать апи.
2. Cоздать в классе 4й метод, в котором будет вызываться определение и нужная логика, а во view вызвать этот 4й метод.
3. Просто прописать всё необходимое во view.
Касательно 2го варианта - слышал я, что существует принцип единой ответственности и наверное он(2й вариант) нарушает данный принцип, но я не уверен). Просто хотелось бы знать как будет наиболее правильно.
Сложно что-то посоветовать , я не знаю что там за классы и как они выглядят.. Ну конечно нужно делать с максимальным разделением ответственности, создать дополнительный модуль (файл), в нем класс типа OrderService или BookService , который будет обслуживать эти сущности. И обращаться из вью к этому сервисному классу, вызывать его метод какой-то. Внутри этого класса тоже все разбить по функциям, чем они меньше тем лучше. Во вью хорошо бы никакой логики не делать. То есть более всего подходит вариант 1 , я думаю.
@@SeniorPomidorDeveloper спасибо
Очень интересно, но почему то не создается пользователь. Когда переходишь в админку, то приложение использует логин админа. Несколько раз удалял пользователя на гитхабе, чистил кэш, и в разных браузерах, результат тот же.
в общем гитхаб создает профиль в User social auths, но не создает пользователя. Почему пока не ясно, Google создает пользователя и профиль. Те логиниться с гитхаба получается, но в админке пользователя не создается.
☹️
У меня тоже самое
нужно изначально заходить в git с другого браузера/где не входил админ,иначе он подумает что у админа такой гит
У меня доступ открыт и все тут. Я разлогинил всех пользователей базы. Все равно доступ открыт. Что еще попробовать сделать?
Что значит доступ открыт? Если неавторизованные пользователи могут обращаться к энднойнтам api, значит надо смотреть в классы авторизации.
Чтобы было проще понять, можно приложить скриншот и написать в нашу группу в телеграмме, ссылка в профиле
если шо, теперь SOCIAL_AUTH_POSTGRES_JSONFIELD = True, НУЖНО ПЕРЕИМНОВАТЬ В SOCIAL_AUTH_POSTGRES_JSONFIELD_ENABLED = True.
помогите пожалуйста. прошел весь этот курс, хотел опять войти через url .../auth/, гитхаб после редиректа на сервер выдает ошибку 'The current path, accounts/profile/, didn’t match any of these.'
Напишите в группу в телегу , ссылка в профиле
жду новые видео, чтобы посмотреть на чудесные кудряшки
☺️
Привет! А есть исходники на гитхабе ?
github.com/chepe4pi/books_lessons
Спасибо, не могу разобраться с авторизацией JWT или через Token.
Как-нибудь попробую снять об этом
А как передать json в шаблон?
В виде переменной , я думаю
помогите плиз!!! уже всё испробовал! постоянно вот такая ошибка ModuleNotFoundError: No module named 'social_django.urls'
после добавления re_path('', include('social_django.urls', namespace='social'))
Напишите в группу в телеграмме, ссылка в профиле
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
Так работает
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')),
С тем же столкнулся, оказалось, что я не поставил запятую, после добавления строки 'social_core.backends.github.GithubOAuth2'
Если кому поможет ошибку выдаёт при написание 'social_djaongo ' в приложении
Напишите в утилетах вместо force_text , force_str
Красава чувак, респект тебе. 👍👍👍
Ya pereopredelil username na email i pri autorizacii cherez github, on autoriziruetsya bez imeni)