Хороший урок, подписался на Вас ! Только я не понял где бы мне подсмотреть как поле name из таблицы personal_access_tokens установил значения из входящего поля device_name, если не затруднит ответить? Что то найти не удалсоь
Спасибо большое! Вот на этой строке - github.com/igorbabko/youtube-api-clone/blob/main/app/Http/Controllers/PersonalAccessTokenController.php#L28 при создании токена мы указываем название из поля $request->device_name, которое приходит в теле запроса. Или Вы не об этом спрашивали?)
Мне не совсем понятно, как ограничить ability между гостем и аутентифицированым пользователем? Если у меня есть метод контроллера index и show которые должны быть частично доступны для гостя, показывать только определенный контент. Но Gate не определит гостя если у него нет ability. У меня при создании токена и определении его, пользователь по факту не авторизован, а у него есть только токен, но я не могу получить авторизованного пользователя, а только наличие токена.
Токены можно создавать только для аутентифицированных пользователей, то-есть для тех, кто выполнил вход в систему (log in). Вероятно, Вам нужно воспользоваться middleware auth и guest, и присвоить эти middleware тем роутам, для которых пользователь должен являться аутентифицированным либо гостем - stackoverflow.com/a/37517360 laravel.com/docs/11.x/middleware#assigning-middleware-to-routes На канале также есть плейлист по стандартной регистрации и аутентификации в Laravel, там используются middleware auth и guest - ua-cam.com/play/PL-FhWbGlJPfbQNYUvmHM6qZ54vxuZ8zeS.html
Кратко это объяснить сложно, поэтому оставлю ссылку на статью. Возможно, она Вам поможет - medium.com/@marcboko.uriel/manage-refresh-token-and-acces-token-with-laravel-sanctum-85defbce46ed
Вообще отлично, но на практике не реально для подтверждения письма так как юзер с фронта попадает в бек и он там никак не может быть авторизован, такое себе
@@igorbabko Ну пользователь же не будет копировать ссылку и отправлять её на определённый урл из фронтенда, он просто кликнет по ссылке и перейдёт согласно вашего кода в бек, соответственно не имея никаких данных о токенах или ещё чего-то
Да, согласен) все роуты можно определить в файле api.php. Я просто здесь сделал как в пакете Laravel Breeze - github.com/laravel/breeze/blob/1.x/stubs/api/routes/web.php#L20 , где роуты, связанные с регистрацией и аутентификацией определены в web.php)
И еще ко всем роутам в файле web.php применяется middleware StartSession, который запускает сессию - github.com/laravel/laravel/blob/10.x/app/Http/Kernel.php#L35 , поэтому, если определять роуты для регистрации и аутентификации в файле api.php, то надо будет вручную присвоить middleware StartSession этим роутам.
Спасибо большое за материал, очень полезно. Есть вопрос по X-XSRF-TOKEN, как-то уж чрезмерно приходится его использовать в запросах. При авторизации/логине ок, но на внутренних запросах когда ты уже в системе может есть смысл его опускать, т.к. не вижу тут проблем с безопасностью. Как это можно делать грамотней используя функционал фреймворка?
Спасибо за комментарий) Для отключения проверки CSRF токена можно удалить данную строку из конфиг файла config/sanctum.php - github.com/laravel/sanctum/blob/3.x/config/sanctum.php#L63
Еще здесь можно явно указать адреса, для которых CSRF проверка должна быть отключена - github.com/laravel/laravel/blob/10.x/app/Http/Middleware/VerifyCsrfToken.php#L15
Факт аутентификации пользователя не спасет вас от csrf атак. При подобных атаках post запрос отправит все ваши куки, в том числе и сессию с авторизацией, на сервер и этот запрос выполнится под вашим именем. Так что проверка xsrf токена должна быть на всех post роутах с аутентификацией. Если хотите делать меньше запросов - можете генерировать себе токен один раз при инициализации spa, и пока вкладка не будет закрыта - использовать только его
Спасибо за видео! Получается, если у меня пользователи могут регистрироваться через мобильное приложения, то мне не нужно делать регистрацию через X-XSRF-TOKEN? А нужно делать все действия связанные с аутентификацией и работой с пользователями, через API токены?
Всегда пожалуйста! Все же при регистрации нужно отправлять X-XSRF-TOKEN в запросе. А уже когда пользователь зарегистрирован, то можно просто получить API токен используя email и пароль зарегистрированного пользователя. И после этого передавать полученный API токен в каждом запросе, который требует, чтобы пользователь был аутентифицирован.
@@igorbabko а если регистрация через мобильное приложение, то тут же нет X-XSRF-TOKEN. И получается просто регистрируемся через моб приложение, а потом уже работаем через апи токен?
Это зависит от реализации логики регистрации на вашем backend-е. Если роут для регистрации не запрашивает X-XSRF-TOKEN, тогда его передавать не нужно. Просто роут регистрации в этом видео запрашивает X-XSRF-TOKEN, поэтому сначала нужно выполнить запрос для получения X-XSRF-TOKEN-а, и потом его передавать в запросе на регистрацию (даже если клиентом является мобильное приложение). Как раз здесь это показано - ua-cam.com/video/PYiM-SzyZQE/v-deo.html А уже после регистрации просто получаете API токен с помощью отдельного запроса, и далее аутентифицируете последующие запросы на сервер с помощью этого токена (как Вы упомянули выше) - ua-cam.com/video/PYiM-SzyZQE/v-deo.html
Технически материал хорош, спору нет, но упаси Вас господь слушать свой же материал на безальтернативной основе. И я понимаю, куда мне следует пойти с моим фидбеком, однако, автор, было бы здорово, если бы интонация не была одной на все случаи жизни, мне представляется, что это сделает твою персону и твой контент, как следствие - лучше. В том случае, если так задумано, вопросов нет. Но я бы еще раз пересмотрел подход, все же, воспринимать сублимированную речь еще и с попыткой английского пронаунса, лично мне - невыносимо тяжело. Еще раз, желаю только успехов, это мой персональный фидбек ни к чему не обязывающий. Я уже благодарен за информацию, но был бы счастлив, будь подача чуточку человечнее, спасибо.
Спасибо большое за отзыв! Да, я над своим произношением и интонацией я работаю, стараюсь улучшать с каждым новым видео)) По поводу английского произношения, были разные комментарии на этот счет. Кто-то был за, кто-то против) Поэтому я продолжу собирать фидбек касательно этого. Еще раз спасибо)
Все роуты можно определить в файле api.php. Я просто здесь сделал как в пакете Laravel Breeze - github.com/laravel/breeze/blob/1.x/stubs/api/routes/web.php#L20 , где роуты, связанные с регистрацией и аутентификацией определены в web.php) И еще ко всем роутам в файле web.php применяется middleware StartSession, который запускает сессию - github.com/laravel/laravel/blob/10.x/app/Http/Kernel.php#L35 , поэтому, если определять роуты для регистрации и аутентификации в файле api.php, то надо будет вручную присвоить middleware StartSession этим роутам.
Telegram - t.me/igorbabko_dev
Благодарю за такой качественный контент
Спасибо большое!
Очень подробный гайд, спасибо
Пожалуйста)
Полезно, спасибо за видео👍
Не за что)
Супер, спасибо большое!
Не за что)
супер качественно!
Спасибо большое!
Thanks
You are welcome)
дякую...ви мені допомогли
Всегда пожалуйста)
Хороший урок, подписался на Вас ! Только я не понял где бы мне подсмотреть как поле name из таблицы personal_access_tokens установил значения из входящего поля device_name, если не затруднит ответить? Что то найти не удалсоь
Забыл поблагодарить за урок. У вас действительно хороший материал и подача, желаю успехов в развитии канала !
Спасибо большое! Вот на этой строке - github.com/igorbabko/youtube-api-clone/blob/main/app/Http/Controllers/PersonalAccessTokenController.php#L28 при создании токена мы указываем название из поля $request->device_name, которое приходит в теле запроса. Или Вы не об этом спрашивали?)
Благодарю за подписку и поддержку!!
Мне не совсем понятно, как ограничить ability между гостем и аутентифицированым пользователем?
Если у меня есть метод контроллера index и show которые должны быть частично доступны для гостя, показывать только определенный контент.
Но Gate не определит гостя если у него нет ability.
У меня при создании токена и определении его, пользователь по факту не авторизован, а у него есть только токен, но я не могу получить авторизованного пользователя, а только наличие токена.
Можно ли создать токен гостю?
Токены можно создавать только для аутентифицированных пользователей, то-есть для тех, кто выполнил вход в систему (log in). Вероятно, Вам нужно воспользоваться middleware auth и guest, и присвоить эти middleware тем роутам, для которых пользователь должен являться аутентифицированным либо гостем - stackoverflow.com/a/37517360
laravel.com/docs/11.x/middleware#assigning-middleware-to-routes
На канале также есть плейлист по стандартной регистрации и аутентификации в Laravel, там используются middleware auth и guest - ua-cam.com/play/PL-FhWbGlJPfbQNYUvmHM6qZ54vxuZ8zeS.html
а рефреш токен ещё как сделать
Кратко это объяснить сложно, поэтому оставлю ссылку на статью. Возможно, она Вам поможет - medium.com/@marcboko.uriel/manage-refresh-token-and-acces-token-with-laravel-sanctum-85defbce46ed
Вообще отлично, но на практике не реально для подтверждения письма так как юзер с фронта попадает в бек и он там никак не может быть авторизован, такое себе
Благодарю за комментарий! Но не совсем понял, в чем именно здесь проблема)
@@igorbabko Ну пользователь же не будет копировать ссылку и отправлять её на определённый урл из фронтенда, он просто кликнет по ссылке и перейдёт согласно вашего кода в бек, соответственно не имея никаких данных о токенах или ещё чего-то
Да, ну здесь просто показана реализация бэкенда, без привязки к конкретному фронтенду)
👍🔥
Спасибо большое)
И на чем нужно основываться, когда часть роутов пишем в web.php, а другую в api.php?
По факту же все запросы идут к API
Да, согласен) все роуты можно определить в файле api.php. Я просто здесь сделал как в пакете Laravel Breeze - github.com/laravel/breeze/blob/1.x/stubs/api/routes/web.php#L20 , где роуты, связанные с регистрацией и аутентификацией определены в web.php)
И еще ко всем роутам в файле web.php применяется middleware StartSession, который запускает сессию - github.com/laravel/laravel/blob/10.x/app/Http/Kernel.php#L35 , поэтому, если определять роуты для регистрации и аутентификации в файле api.php, то надо будет вручную присвоить middleware StartSession этим роутам.
Спасибо большое за материал, очень полезно.
Есть вопрос по X-XSRF-TOKEN, как-то уж чрезмерно приходится его использовать в запросах.
При авторизации/логине ок, но на внутренних запросах когда ты уже в системе может есть смысл его опускать, т.к. не вижу тут проблем с безопасностью.
Как это можно делать грамотней используя функционал фреймворка?
Спасибо за комментарий)
Для отключения проверки CSRF токена можно удалить данную строку из конфиг файла config/sanctum.php - github.com/laravel/sanctum/blob/3.x/config/sanctum.php#L63
Еще здесь можно явно указать адреса, для которых CSRF проверка должна быть отключена - github.com/laravel/laravel/blob/10.x/app/Http/Middleware/VerifyCsrfToken.php#L15
Факт аутентификации пользователя не спасет вас от csrf атак. При подобных атаках post запрос отправит все ваши куки, в том числе и сессию с авторизацией, на сервер и этот запрос выполнится под вашим именем. Так что проверка xsrf токена должна быть на всех post роутах с аутентификацией. Если хотите делать меньше запросов - можете генерировать себе токен один раз при инициализации spa, и пока вкладка не будет закрыта - использовать только его
@@MrShnaiderTV Благодарю за развернутый ответ!
Спасибо за видео! Получается, если у меня пользователи могут регистрироваться через мобильное приложения, то мне не нужно делать регистрацию через X-XSRF-TOKEN? А нужно делать все действия связанные с аутентификацией и работой с пользователями, через API токены?
Всегда пожалуйста! Все же при регистрации нужно отправлять X-XSRF-TOKEN в запросе. А уже когда пользователь зарегистрирован, то можно просто получить API токен используя email и пароль зарегистрированного пользователя. И после этого передавать полученный API токен в каждом запросе, который требует, чтобы пользователь был аутентифицирован.
@@igorbabko а если регистрация через мобильное приложение, то тут же нет X-XSRF-TOKEN. И получается просто регистрируемся через моб приложение, а потом уже работаем через апи токен?
Это зависит от реализации логики регистрации на вашем backend-е. Если роут для регистрации не запрашивает X-XSRF-TOKEN, тогда его передавать не нужно. Просто роут регистрации в этом видео запрашивает X-XSRF-TOKEN, поэтому сначала нужно выполнить запрос для получения X-XSRF-TOKEN-а, и потом его передавать в запросе на регистрацию (даже если клиентом является мобильное приложение). Как раз здесь это показано - ua-cam.com/video/PYiM-SzyZQE/v-deo.html
А уже после регистрации просто получаете API токен с помощью отдельного запроса, и далее аутентифицируете последующие запросы на сервер с помощью этого токена (как Вы упомянули выше) - ua-cam.com/video/PYiM-SzyZQE/v-deo.html
@@igorbabko спасибо большое за подробные ответы! Удачи вам в вашем деле!
Всегда пожалуйста) благодарю за поддержку!
Технически материал хорош, спору нет, но упаси Вас господь слушать свой же материал на безальтернативной основе. И я понимаю, куда мне следует пойти с моим фидбеком, однако, автор, было бы здорово, если бы интонация не была одной на все случаи жизни, мне представляется, что это сделает твою персону и твой контент, как следствие - лучше. В том случае, если так задумано, вопросов нет. Но я бы еще раз пересмотрел подход, все же, воспринимать сублимированную речь еще и с попыткой английского пронаунса, лично мне - невыносимо тяжело.
Еще раз, желаю только успехов, это мой персональный фидбек ни к чему не обязывающий.
Я уже благодарен за информацию, но был бы счастлив, будь подача чуточку человечнее, спасибо.
Спасибо большое за отзыв! Да, я над своим произношением и интонацией я работаю, стараюсь улучшать с каждым новым видео))
По поводу английского произношения, были разные комментарии на этот счет. Кто-то был за, кто-то против) Поэтому я продолжу собирать фидбек касательно этого.
Еще раз спасибо)
я тоже знаю куда мне идти со своим фидбеком, и я уже иду туда, но интонация явно заставляет идти ко сну @@igorbabko
@@erlanimanaliev1722 Я стараюсь улучшать подачу материала, произношение и другие аспекты с каждым новым видео))
Если рассказываешь об апи, то не смешивай всё в кучу. Начал по итогу под конец работы с апи сувать сессии, web.php.. зачем?
Все роуты можно определить в файле api.php. Я просто здесь сделал как в пакете Laravel Breeze - github.com/laravel/breeze/blob/1.x/stubs/api/routes/web.php#L20 , где роуты, связанные с регистрацией и аутентификацией определены в web.php)
И еще ко всем роутам в файле web.php применяется middleware StartSession, который запускает сессию - github.com/laravel/laravel/blob/10.x/app/Http/Kernel.php#L35 , поэтому, если определять роуты для регистрации и аутентификации в файле api.php, то надо будет вручную присвоить middleware StartSession этим роутам.
Только в Laravel 11 управление middleware по умолчанию происходит в файле bootstrap/app.php