🔑 Laravel Sanctum - API токены / Регистрация / Аутентификация / Подтверждение почты / Сброс пароля

Поділитися
Вставка
  • Опубліковано 20 сер 2024

КОМЕНТАРІ • 61

  • @igorbabko
    @igorbabko  4 місяці тому

    Telegram - t.me/igorbabko_dev

  • @failj3847
    @failj3847 Рік тому +2

    Благодарю за такой качественный контент

    • @igorbabko
      @igorbabko  Рік тому

      Спасибо большое!

  • @MrRickTV
    @MrRickTV Рік тому

    Очень подробный гайд, спасибо

  • @kirillbaryba746
    @kirillbaryba746 Рік тому

    Полезно, спасибо за видео👍

  • @user-lv4bf6pq4h
    @user-lv4bf6pq4h Рік тому

    Супер, спасибо большое!

  • @shumerok
    @shumerok Рік тому

    супер качественно!

    • @igorbabko
      @igorbabko  Рік тому

      Спасибо большое!

  • @user-zu3ld8is4y
    @user-zu3ld8is4y Рік тому +1

    Thanks

  • @vuviy1711
    @vuviy1711 5 місяців тому

    дякую...ви мені допомогли

    • @igorbabko
      @igorbabko  5 місяців тому

      Всегда пожалуйста)

  • @user-pc4uc8wn3c
    @user-pc4uc8wn3c 9 днів тому

    Хороший урок, подписался на Вас ! Только я не понял где бы мне подсмотреть как поле name из таблицы personal_access_tokens установил значения из входящего поля device_name, если не затруднит ответить? Что то найти не удалсоь

    • @user-pc4uc8wn3c
      @user-pc4uc8wn3c 9 днів тому

      Забыл поблагодарить за урок. У вас действительно хороший материал и подача, желаю успехов в развитии канала !

    • @igorbabko
      @igorbabko  8 днів тому

      Спасибо большое! Вот на этой строке - github.com/igorbabko/youtube-api-clone/blob/main/app/Http/Controllers/PersonalAccessTokenController.php#L28 при создании токена мы указываем название из поля $request->device_name, которое приходит в теле запроса. Или Вы не об этом спрашивали?)

    • @igorbabko
      @igorbabko  8 днів тому

      Благодарю за подписку и поддержку!!

  • @aizerbox123
    @aizerbox123 5 місяців тому

    Мне не совсем понятно, как ограничить ability между гостем и аутентифицированым пользователем?
    Если у меня есть метод контроллера index и show которые должны быть частично доступны для гостя, показывать только определенный контент.
    Но Gate не определит гостя если у него нет ability.
    У меня при создании токена и определении его, пользователь по факту не авторизован, а у него есть только токен, но я не могу получить авторизованного пользователя, а только наличие токена.

    • @aizerbox123
      @aizerbox123 5 місяців тому

      Можно ли создать токен гостю?

    • @igorbabko
      @igorbabko  4 місяці тому

      Токены можно создавать только для аутентифицированных пользователей, то-есть для тех, кто выполнил вход в систему (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

  • @gamingplay5415
    @gamingplay5415 6 місяців тому +1

    а рефреш токен ещё как сделать

    • @igorbabko
      @igorbabko  6 місяців тому +1

      Кратко это объяснить сложно, поэтому оставлю ссылку на статью. Возможно, она Вам поможет - medium.com/@marcboko.uriel/manage-refresh-token-and-acces-token-with-laravel-sanctum-85defbce46ed

  • @samoilenko_roman
    @samoilenko_roman 8 місяців тому

    Вообще отлично, но на практике не реально для подтверждения письма так как юзер с фронта попадает в бек и он там никак не может быть авторизован, такое себе

    • @igorbabko
      @igorbabko  8 місяців тому

      Благодарю за комментарий! Но не совсем понял, в чем именно здесь проблема)

    • @samoilenko_roman
      @samoilenko_roman 8 місяців тому

      @@igorbabko Ну пользователь же не будет копировать ссылку и отправлять её на определённый урл из фронтенда, он просто кликнет по ссылке и перейдёт согласно вашего кода в бек, соответственно не имея никаких данных о токенах или ещё чего-то

    • @igorbabko
      @igorbabko  8 місяців тому

      Да, ну здесь просто показана реализация бэкенда, без привязки к конкретному фронтенду)

  • @dmitriykret8938
    @dmitriykret8938 Рік тому

    👍🔥

    • @igorbabko
      @igorbabko  Рік тому

      Спасибо большое)

  • @the_toxic
    @the_toxic Рік тому

    И на чем нужно основываться, когда часть роутов пишем в web.php, а другую в api.php?
    По факту же все запросы идут к API

    • @igorbabko
      @igorbabko  Рік тому

      Да, согласен) все роуты можно определить в файле api.php. Я просто здесь сделал как в пакете Laravel Breeze - github.com/laravel/breeze/blob/1.x/stubs/api/routes/web.php#L20 , где роуты, связанные с регистрацией и аутентификацией определены в web.php)

    • @igorbabko
      @igorbabko  Рік тому +1

      И еще ко всем роутам в файле web.php применяется middleware StartSession, который запускает сессию - github.com/laravel/laravel/blob/10.x/app/Http/Kernel.php#L35 , поэтому, если определять роуты для регистрации и аутентификации в файле api.php, то надо будет вручную присвоить middleware StartSession этим роутам.

  • @the_toxic
    @the_toxic Рік тому

    Спасибо большое за материал, очень полезно.
    Есть вопрос по X-XSRF-TOKEN, как-то уж чрезмерно приходится его использовать в запросах.
    При авторизации/логине ок, но на внутренних запросах когда ты уже в системе может есть смысл его опускать, т.к. не вижу тут проблем с безопасностью.
    Как это можно делать грамотней используя функционал фреймворка?

    • @igorbabko
      @igorbabko  Рік тому +1

      Спасибо за комментарий)
      Для отключения проверки CSRF токена можно удалить данную строку из конфиг файла config/sanctum.php - github.com/laravel/sanctum/blob/3.x/config/sanctum.php#L63

    • @igorbabko
      @igorbabko  Рік тому +1

      Еще здесь можно явно указать адреса, для которых CSRF проверка должна быть отключена - github.com/laravel/laravel/blob/10.x/app/Http/Middleware/VerifyCsrfToken.php#L15

    • @MrShnaiderTV
      @MrShnaiderTV 4 місяці тому

      Факт аутентификации пользователя не спасет вас от csrf атак. При подобных атаках post запрос отправит все ваши куки, в том числе и сессию с авторизацией, на сервер и этот запрос выполнится под вашим именем. Так что проверка xsrf токена должна быть на всех post роутах с аутентификацией. Если хотите делать меньше запросов - можете генерировать себе токен один раз при инициализации spa, и пока вкладка не будет закрыта - использовать только его

    • @igorbabko
      @igorbabko  4 місяці тому

      @@MrShnaiderTV Благодарю за развернутый ответ!

  • @geniygames4620
    @geniygames4620 4 місяці тому

    Спасибо за видео! Получается, если у меня пользователи могут регистрироваться через мобильное приложения, то мне не нужно делать регистрацию через X-XSRF-TOKEN? А нужно делать все действия связанные с аутентификацией и работой с пользователями, через API токены?

    • @igorbabko
      @igorbabko  4 місяці тому

      Всегда пожалуйста! Все же при регистрации нужно отправлять X-XSRF-TOKEN в запросе. А уже когда пользователь зарегистрирован, то можно просто получить API токен используя email и пароль зарегистрированного пользователя. И после этого передавать полученный API токен в каждом запросе, который требует, чтобы пользователь был аутентифицирован.

    • @geniygames4620
      @geniygames4620 4 місяці тому

      @@igorbabko а если регистрация через мобильное приложение, то тут же нет X-XSRF-TOKEN. И получается просто регистрируемся через моб приложение, а потом уже работаем через апи токен?

    • @igorbabko
      @igorbabko  4 місяці тому +1

      Это зависит от реализации логики регистрации на вашем 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

    • @geniygames4620
      @geniygames4620 4 місяці тому

      @@igorbabko спасибо большое за подробные ответы! Удачи вам в вашем деле!

    • @igorbabko
      @igorbabko  4 місяці тому

      Всегда пожалуйста) благодарю за поддержку!

  • @ratn1ksun
    @ratn1ksun Рік тому

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

    • @igorbabko
      @igorbabko  Рік тому

      Спасибо большое за отзыв! Да, я над своим произношением и интонацией я работаю, стараюсь улучшать с каждым новым видео))
      По поводу английского произношения, были разные комментарии на этот счет. Кто-то был за, кто-то против) Поэтому я продолжу собирать фидбек касательно этого.
      Еще раз спасибо)

    • @erlanimanaliev1722
      @erlanimanaliev1722 5 місяців тому

      я тоже знаю куда мне идти со своим фидбеком, и я уже иду туда, но интонация явно заставляет идти ко сну @@igorbabko

    • @igorbabko
      @igorbabko  4 місяці тому

      ​@@erlanimanaliev1722 Я стараюсь улучшать подачу материала, произношение и другие аспекты с каждым новым видео))

  • @MrCode-vn8nx
    @MrCode-vn8nx 4 місяці тому

    Если рассказываешь об апи, то не смешивай всё в кучу. Начал по итогу под конец работы с апи сувать сессии, web.php.. зачем?

    • @igorbabko
      @igorbabko  4 місяці тому

      Все роуты можно определить в файле 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 этим роутам.

    • @igorbabko
      @igorbabko  4 місяці тому

      Только в Laravel 11 управление middleware по умолчанию происходит в файле bootstrap/app.php