remember token laravel для чего
Laravel Framework Russian Community
Введение
В Laravel уже включены все необходимые миграции для создания аутентификации, но при самостоятельном создании схемы БД не забудьте про два обязательных поля в таблице user (или аналогичной):
Аутентификация пользователей
В Laravel уже есть два контроллера, относящиеся к механизму аутентификации. Контроллер AuthController обрабатывает регистрацию пользователей и вход в приложение, тогда как контроллер PasswordController содержит механизмы для сброса забытых паролей у существующих пользователей.
Каждый из этих контроллеров использует трейты для подключения необходимых методов. Как правило, вам не нужно менять код этих контроллеров. Шаблоны, используемые этими контроллерами, находятся в каталоге resources/views/auth и вы можете свободно изменять их так, как вам нужно.
Регистрация пользователей
Ручная аутентификация
Примечание: В примере выше, поле email не является обязательным, оно выбрано для примера. Вы должны использовать то название колонки, в котором хранится логин в приложении. Как правило, это «username».
Метод intended возвращает пользователя на тот адрес, доступ к которому он хотел получить, прежде чем его поймал фильтр аутентификации. В качестве параметра, в этот метод можно передать резервный адрес, если запрашиваемый адрес недоступен.
Аутентификация пользователя с дополнительными условиями
Вы можете добавить дополнительные условия в аутентификационный запрос:
Как узнать, что пользователь прошел аутентификацию?
Для проверки, аутентифицирован ли пользователь в вашем приложении, можно использовать метод check :
Аутентификация и «запоминание» пользователя
Если вы «запоминаете» пользователя, то можете использовать метод viaRemember чтобы определить, был ли пользователь аутентифицирован с использованием этого механизма:
Аутентификация пользователя по ID
Для аутентификации пользователя по его ID существует метод loginUsingId :
Проверка прав пользователя без аутентификации
Метод validate позволяет проверить права пользователя без фактической аутентификации:
Аутентификация пользователя на время выполнения текущего запроса
Метод once служит для аутентификация пользователя на время выполнения текущего запроса, при этом не используются сессия и куки:
Ручная аутентификация пользователя
Для принудительной аутентификации пользователя существует метод login :
Это эквивалентно аутентификации с использованием метода attempt и передачей параметров пользователя.
Выход из приложения
Конечно, если вы используете встроенные контроллеры Laravel для аутентификации, то в них всё это уже реализовано.
События при аутентификации
Получение аутентифицированного пользователя
Как только пользователь аутентифицирован, вы можете получить объект пользователя несколькими путями.
Во-первых, с помощью фасада Auth :
Во-вторых, используя метод user класса Illuminate\Http\Request :
В третьих, можно использовать мощь сервис-контейнера, указав в качестве аргумента в конструкторе или методе контракт Illuminate\Contracts\Auth\Authenticatable :
Ограничение доступа к роутам
Аутентификация на основе HTTP Basic
Аутентификация на основе HTTP Basic позволяет аутентифицировать пользователей быстро и без отдельной страницы входа. Для этого надо указать посредника auth.basic в описании нужного роута:
Защита роута при помощи HTTP Basic
По умолчанию, посредник basic использует поле email из таблицы пользователей в качестве идентификатора пользователя.
Настройка Stateless HTTP Basic фильтра
Так же можно использовать аутентификацию на основе HTTP Basic без создания сессии и идентификационной куки, что часто используется для аутентификации через API. Для этого нужно создать посредника, который будет вызывать метод onceBasic :
Напоминание и сброс пароля
Модель и таблица
Большинство веб-приложения позволяют пользователям сбросить забытый пароль. Вместо того, чтобы каждый раз изобретать велосипед, Laravel предоставляет удобный механизм для реализации этой возможности.
Создание миграции для таблицы с напоминаниями паролей
Контроллер напоминания паролей
Аутентификация через социальные сети
В добавок к обычной аутентификации, с помощью форм и HTTP Basic, Laravel предоставляет простой и удобный механизм аутентификации через OAuth, используя Laravel Socialite. Socialite пока что поддерживает аутентификацию только через Facebook, Twitter, Google и GitHub.
Чтобы начать использовать Socialite, добавьте этот пакет в ваш файл composer.json :
После этого нужно добавить два роута: один для перенаправления пользователя к провайдеру OAuth, второй для получения ответа от провайдера после аутентификации пользователя. Пример с использованием фасада Socialize :
Метод redirect выполнит перенаправление к провайдеру OAuth, а метод user получит информацию о пользователе из ответа провайдера OAuth. Перед перенаправлением, вы можете указать области доступа:
Как только вы получите объект пользователя, можно получить пользовательские данные:
Laravel Framework Russian Community
Пролог
Начало работы
Основы архитектуры
Основы
Фронтенд
Безопасность
Копаем глубже
База данных
Eloquent ORM
Тестирование
Официальные пакеты
Аутентификация
Введение
Провайдеры определяют то, как именно пользователи извлекаются из вашей базы данных. Laravel поставляется с поддержкой извлечения пользователей с помощью Eloquent и конструктора запросов БД. Но при необходимости вы можете определить дополнительные провайдеры для своего приложения.
Не переживайте, если сейчас это звучит слишком запутанно! Для большинства приложений никогда не потребуется изменять стандартные настройки аутентификации.
Требования для базы данных
При создании схемы базы данных для модели App\User создайте столбец для паролей с длиной не менее 60 символов. Хорошим выбором будет длина 255 символов.
Кроме того, перед началом работы удостоверьтесь, что ваша таблица users (или эквивалентная) содержит строковый столбец remember_token на 100 символов. Этот столбец будет использоваться для хранения ключей сессий «запомнить меня», обрабатываемых вашим приложением.
Краткое руководство по аутентификации
Роутинг
Laravel обеспечивает быстрый способ создания заготовок всех необходимых для аутентификации роутов и шаблонов при помощи пакета laravel/ui :
Создание системы аутентификации вместе с созданием приложения
Шаблоны
Аутентификация
Теперь, когда у вас есть роуты и шаблоны для имеющихся контроллеров аутентификации, вы готовы регистрировать и аутентифицировать новых пользователей своего приложения! Вы можете просто перейти по этим роутам в браузере. Контроллеры аутентификации уже содержат логику (благодаря их типажам) для аутентификации существующих пользователей и сохранения новых пользователей в базе данных.
Изменение пути
Настройка имени пользователя
Настройка гварда
Настройка валидации / хранения
Метод validator класса RegisterController содержит правила проверки ввода данных для новых пользователей приложения.
Метод create класса RegisterController отвечает за создание новых записей App\User в вашей базе данных с помощью Eloquent ORM. Вы можете изменить каждый из этих методов, как пожелаете.
Получение аутентифицированного пользователя
Вы можете обращаться к аутентифицированному пользователю через фасад Auth :
Определение, аутентифицирован ли пользователь
Защита роутов
Вы также можете вызвать метод middleware из конструктора контроллера, вместо присоединения его напрямую к определению роута:
Обработка неаутентифицированных пользователей
Указание гварда
Во время прикрепления посредника auth к роуту, вы можете также указать, какой гвард должен быть использован для выполнения аутентификации. Указанный гвард должен соответствовать одному из ключей в массиве guards вашего конфига auth.php :
Защита повторным вводом пароля
После успешного ввода пароля произойдёт редирект на защищаемый роут. При повтором входе на этот роут пароль не будет спрашиваться в течении трёх часов. Вы можете изменить это время путём редактирования опции auth.password_timeout в конфиге.
Троттлинг аутентификации (ограничение числа неудачных попыток входа)
Аутентификация пользователей вручную
Вы можете написать свои контроллеры аутентификации пользователей, не пользоваться теми, что генерирует фреймворк, если по какой-то причине они вас не устраивают. Для этого вам нужно использовать в своих контроллерах классы аутентификации Laravel. Не волнуйтесь, это просто.
Метод intended «редиректора» перенаправит пользователя к тому URL, к которому он обращался до того, как был перехвачен фильтром аутентификации. В этот метод можно передать запасной URI, на случай недоступности требуемого пути.
Указание дополнительных условий
При необходимости вы можете добавить дополнительные условия к запросу аутентификации, помимо адреса e-mail и пароля. Например, можно проверить отметку «активности» пользователя:
В этих примерах email не является обязательным вариантом, он приведён только для примера. Вы можете использовать какой угодно столбец, соответствующий «username» в вашей базе данных.
Обращение к конкретным экземплярам гварда
С помощью метода guard фасада Auth вы можете указать, какой экземпляр гварда необходимо использовать. Это позволяет управлять аутентификацией для отдельных частей вашего приложения, используя полностью отдельные модели для аутентификации или таблицы пользователей.
Передаваемое в метод guard имя гварда должно соответствовать одному из защитников, настроенных в конфиге auth.php :
Завершение сессии
Запоминание пользователей
Другие методы аутентификации
Аутентификация экземпляра пользователя
Конечно, вы можете указать, какой экземпляр гварда надо использовать:
Аутентификация пользователя по ID
Однократная аутентификация пользователя
Вы также можете использовать метод once для пользовательского входа в систему для одного запроса. Сеансы и cookies не будут использоваться, что может быть полезно при создании API без сохранения состояний:
HTTP-аутентификация
HTTP-аутентификация — простой и быстрый способ аутентификации пользователей вашего приложения без создания дополнительной страницы входа. Для начала прикрепите посредника auth.basic к своему роуту. Посредник auth.basic встроен в Laravel, поэтому вам не надо определять его:
Когда посредник прикреплён к роуту, вы автоматически получите запрос данных для входа при обращении к роуту через браузер. По умолчанию посредник auth.basic будет использовать столбец email из записи пользователя в качестве «username».
Замечание по FastCGI
HTTP-аутентификация без сохранения состояния
Завершение сессии
Инвалидация сессий на других устройствах
В Laravel есть механизм для завершении сессии на других устройствах (браузерах), оставляя сессию на данном устройстве активной. Например, это требуется когда пользователь изменяет свой пароль.
Чтобы этот функционал работал, в app/Http/Kernel.php в секции web должен быть добавлен посредник Illuminate\Session\Middleware\AuthenticateSession
При вызове метода logoutOtherDevices все сессии пользователя кроме текущей будут инвалидированы, что означает, что пользователь будет «разлогинен» во всех гвардах, в которых он был ранее аутентифицирован.
Добавление собственных гвардов
Гварды в виде анонимных функций
Вот пример аутентификации по токену, который передан в запросе:
Добавление собственных провайдеров пользователей
Если вы не используете традиционную реляционную базу данных для хранения ваших пользователей, вам необходимо добавить в Laravel свой собственный провайдер аутентификации пользователей. Мы используем метод provider фасада Auth для определения своего провайдера:
Затем вы можете использовать этот провайдер в вашей настройке guards :
Контракт User Provider
Реализации Illuminate\Contracts\Auth\UserProvider отвечают только за извлечение реализаций Illuminate\Contracts\Auth\Authenticatable из постоянных систем хранения, таких как MySQL, Riak, и т.п. Эти два интерфейса позволяют механизмам аутентификации Laravel продолжать функционировать независимо от того, как хранятся данные пользователей и какой тип класса использован для их представления.
Давайте взглянем на контракт Illuminate\Contracts\Auth\UserProvider :
Контракт Authenticatable
События
Laravel генерирует различные события в процессе аутентификации. Вы можете прикрепить слушателей к этим событиям в вашем EventServiceProvider :
Laravel Framework Russian Community
Пролог
Начало работы
Основы архитектуры
Основы
Фронтенд
Безопасность
Копаем глубже
База данных
Eloquent ORM
Тестирование
Официальные пакеты
Аутентификация
Введение
Хотите быстро начать работу? Просто запустите php artisan make:auth и php artisan migrate в свежем приложении Laravel. Затем перейдите в браузере по адресу http://your-app.dev/register или откройте любой другой URL, который назначен вашему приложению. Эти две команды позаботятся о создании модулей для всей вашей системы аутентификации!
Провайдеры определяют то, как именно пользователи извлекаются из вашей базы данных. Laravel поставляется с поддержкой извлечения пользователей с помощью Eloquent и конструктора запросов БД. Но при необходимости вы можете определить дополнительные провайдеры для своего приложения.
Не переживайте, если сейчас это звучит слишком запутанно! Для большинства приложений никогда не потребуется изменять стандартные настройки аутентификации.
Требования для базы данных
При создании схемы базы данных для модели App\User создайте столбец для паролей с длиной не менее 60 символов. Хорошим выбором будет длина 255 символов.
Кроме того, перед началом работы удостоверьтесь, что ваша таблица users (или эквивалентная) содержит строковый столбец remember_token на 100 символов. Этот столбец будет использоваться для хранения ключей сессий «запомнить меня», обрабатываемых вашим приложением.
Краткое руководство по аутентификации
Роутинг
Laravel обеспечивает быстрый способ создания заготовок всех необходимых для аутентификации роутов и шаблонов с помощью одной команды:
Шаблоны
Аутентификация
Теперь, когда у вас есть роуты и шаблоны для имеющихся контроллеров аутентификации, вы готовы регистрировать и аутентифицировать новых пользователей своего приложения! Вы можете просто перейти по этим роутам в браузере. Контроллеры аутентификации уже содержат логику (благодаря их типажам) для аутентификации существующих пользователей и сохранения новых пользователей в базе данных.
Изменение пути
Если для пути перенаправления требуется собственная логика генерации, можно задать метод redirectTo вместо свойства redirectTo :
Настройка имени пользователя
Настройка гварда
Настройка валидации / хранения
Метод validator класса RegisterController содержит правила проверки ввода данных для новых пользователей приложения.
Метод create класса RegisterController отвечает за создание новых записей App\User в вашей базе данных с помощью Eloquent ORM. Вы можете изменить каждый из этих методов, как пожелаете.
Получение аутентифицированного пользователя
Вы можете обращаться к аутентифицированному пользователю через фасад Auth :
Определение, аутентифицирован ли пользователь
Защита роутов
Конечно, если вы используете контроллеры, вы можете вызвать метод middleware из конструктора контроллера, вместо присоединения его напрямую к определению роута:
Указание гварда
Во время прикрепления посредника auth к роуту, вы можете также указать, какой гвард должен быть использован для выполнения аутентификации. Указанный гвард должен соответствовать одному из ключей в массиве guards вашего конфига auth.php :
Троттлинг аутентификации (ограничение числа неудачных попыток входа)
Ручная аутентификация пользователей
Конечно, совсем не обязательно использовать контроллеры аутентификации, включенные в Laravel. Если вы захотите убрать эти контроллеры, вам нужно будет напрямую управлять аутентификацией пользователей, используя классы аутентификации Laravel. Не волнуйтесь, они не кусаются!
Метод intended «редиректора» перенаправит пользователя к тому URL, к которому он обращался до того, как был перехвачен фильтром аутентификации. В этот метод можно передать запасной URI, на случай недоступности требуемого пути.
Указание дополнительных условий
При необходимости вы можете добавить дополнительные условия к запросу аутентификации, помимо адреса e-mail и пароля. Например, можно проверить отметку «активности» пользователя:
В этих примерах email не является обязательным вариантом, он приведён только для примера. Вы можете использовать какой угодно столбец, соответствующий «username» в вашей базе данных.
Обращение к конкретным экземплярам гварда
С помощью метода guard фасада Auth вы можете указать, какой экземпляр гварда необходимо использовать. Это позволяет управлять аутентификацией для отдельных частей вашего приложения, используя полностью отдельные модели для аутентификации или таблицы пользователей.
Передаваемое в метод guard имя гварда должно соответствовать одному из защитников, настроенных в конфиге auth.php :
Завершение сессии
Запоминание пользователей
Другие методы аутентификации
Аутентификация экземпляра пользователя
Конечно, вы можете указать, какой экземпляр гварда надо использовать:
Аутентификация пользователя по ID
Однократная аутентификация пользователя
Вы также можете использовать метод once для пользовательского входа в систему для одного запроса. Сеансы и cookies не будут использоваться, что может быть полезно при создании API без сохранения состояний:
HTTP-аутентификация
HTTP-аутентификация — простой и быстрый способ аутентификации пользователей вашего приложения без создания дополнительной страницы входа. Для начала прикрепите посредника auth.basic к своему роуту. Посредник auth.basic встроен в Laravel, поэтому вам не надо определять его:
Когда посредник прикреплён к роуту, вы автоматически получите запрос данных для входа при обращении к роуту через браузер. По умолчанию посредник auth.basic будет использовать столбец email из записи пользователя в качестве «username».
Замечание по FastCGI
HTTP-аутентификация без сохранения состояния
Добавление собственных гвардов
Добавление собственных провайдеров пользователей
Если вы не используете традиционную реляционную базу данных для хранения ваших пользователей, вам необходимо добавить в Laravel свой собственный провайдер аутентификации пользователей. Мы используем метод provider фасада Auth для определения своего провайдера:
Затем вы можете использовать этот провайдер в вашей настройке guards :
Контракт User Provider
Реализации Illuminate\Contracts\Auth\UserProvider отвечают только за извлечение реализаций Illuminate\Contracts\Auth\Authenticatable из постоянных систем хранения, таких как MySQL, Riak, и т.п. Эти два интерфейса позволяют механизмам аутентификации Laravel продолжать функционировать независимо от того, как хранятся данные пользователей и какой тип класса использован для их представления.
Давайте взглянем на контракт Illuminate\Contracts\Auth\UserProvider :
Контракт Authenticatable
События
Laravel генерирует различные события в процессе аутентификации. Вы можете прикрепить слушателей к этим событиям в вашем EventServiceProvider :
Laravel Framework Russian Community
Введение
Фактически, подсистема аутентификации Laravel состоит из двух частей:
Providers, «провайдеры». Они определяют, как можно получить данные пользователя из базы данных или другого места хранения. В Laravel можно получать пользователя через Eloquent и Query Builder, но вы можете написать свой провайдер, если по каким-то причинам, хотите хранить данные пользователей, например, в файле.
Настройки базы данных
Быстрый старт
Routing
Чтобы сгенерировать роуты и шаблоны, которые нужны для процесса аутентификации (страница регистрации, логина, восстановления пароля и т.п.), вам нужно выполнить всего одну команду:
Естественно, вы можете отредактировать эти сгенерированные файлы так, как вам нужно.
Views
Аутентификация
Контроллеры аутентификации уже были в приложении, роуты и шаблоны вы только что сгенерировали. Всё, теперь пользователи могут регистрироваться и логиниться в ваше приложение.
Настройка путей
Если логин не успешный, то происходит автоматический редирект назад на страницу логина.
Для изменения пути, куда будет перенаправлен пользователь после выхода, требуется определить свойство redirectAfterLogout класса AuthController :
Настройка гардов (guards)
Настройка валидации и сохранения пользователей
Метод validator класса AuthController содержит в себе правила валидации формы регистрации новых пользователей. Вы можете изменять его, как пожелаете.
Метод create класса AuthController отвечает за создание новых App\User записей в вашей базе данных, используя Eloquent ORM. Вы также можете изменять его под требования вашего приложения.
Получение аутентифицированного пользователя
Вы можете получить аутентифицированного пользователя при помощи фасада Auth :
Проверка пользователя на аутентифицированность в приложении
Однако, вы также можете использовать посредников ( middleware ) для проверки аутентификации пользователя перед доступом к конкретным роутам / контроллерам.
Ограничение доступа к роутам
Конечно, если вы используете контроллеры, вы можете вызвать метод middleware внутри них, в конструкторе:
Назначение гарда
Когда вы назначаете middleware auth для защиты роута, вы можете явно указать, какой guard из тех, что определены у вас в config/auth.php вы хотите использовать в данном случае:
Защита от перебора паролей
Ручная аутентификация пользователей
Конечно же, вы не обязаны использовать контроллеры аутентификации, включённые в Laravel. Если вы удалите эти контроллеры, нужно будет управлять аутентификацией пользователей при помощи классов аутентификации Laravel. Не волнуйтесь, это просто!
Метод intended редиректора переместит пользователя на URL, на который он хотел попасть до прохождения аутентификации. Запасной URL указывается в параметре и будет использован, если путь, куда хотел перейти пользователь, недоступен.
Дополнительные условия прохождения аутентификации
Если хотите, вы также можете добавить дополнительные условия прохождения аутентификации в дополнение к e-mail и паролю. Например, вы можете проверять, активен ли пользователь:
Обратите внимание: В этих примерах поле email не обязательно должно использоваться для поиска пользователя, оно выбрано для примера. Вы можете использовать любое поле для поиска пользователя, которое является уникальным в таблице пользователей вашей базы данных.
Авторизация с использованием заданного гарда
Тогда при логине в админку вы делаете так:
Выход из приложения
Запоминание пользователей
Если вы «запоминаете» пользователей, можете использовать метод viaRemember для определения того, аутентифицировался ли пользователь с помощью куки «запомнить меня»:
Другие методы аутентификации
Аутентификация экземпляра пользователя
Вы также можете явно указать гард, при помощи которого будете фиксировать процесс аутентификации.
Аутентификация по ID пользователя
Аутентификация пользователя на один запрос
Вы также можете использовать метод once для аутентификации пользователя в вашем приложении на один запрос. Ни сессии, ни куки не будут созданы, что может быть использовано для создания stateless API. Метод once работает по тому же принципу, что и attempt :
Аутентификация HTTP Basic
HTTP Basic Аутентификация предоставляет быстрый способ аутентифицировать пользователя в вашем приложении без создания отдельной страницы входа. Сначала добавьте посредник auth.basic в ваш роут. Он включён в Laravel по умолчанию, так что вам не нужно создавать его:
Как только посредник прикреплён к роуту, он автоматически будет показывать окно аутентификации в браузере при посещении этого роута. По умолчанию auth.basic использует поле email для поиска пользователя.
Примечание для FastCGI
Stateless HTTP Basic Аутентификация
Дальше зарегистрируйте посредника и привяжите его к роуту:
Сброс пароля
Настройка базы данных
Большинство веб-приложений предоставляют пользователю возможность сбрасывать свой пароль. Для того, чтобы вам не приходилось реализовывать это в каждом приложении, Laravel предоставляет простой способ отправки «напоминателей» паролей и осуществления сброса пароля.
Создание миграции таблицы токенов сброса паролей
Routing
Views
Эта же команда создает в папке resources/views/auth/passwords шаблоны для страниц восстановления пароля.
Действия после сброса пароля
Настройка сброса пароля
Настройка гардов
В config/auth.php вы можете определить несколько гардов. Чтобы использовать выбранный гард для процедуры восстановления пароля, добавьте свойство в класс PasswordController :
Password Broker Customization
Создание своего гарда
You may define your own authentication guards using the extend method on the Auth facade. You should place this call to provider within a service provider:
Теперь вы можете использовать гард jwt в конфигах:
Создание своего провайдера
Далее мы можем юзать этот провайдер в конфигурации гардов:
Контракт User Provider
Реализации контракта Illuminate\Contracts\Auth\UserProvider ответственны только за получение реализации контракта Illuminate\Contracts\Auth\Authenticatable из хранилища данных, такого, например, как MySQL, Riak и тд. Эти два интерфейса позволяют Laravel использовать механизмы аутентификации независимо от того, как хранятся данные приложения.
Давайте посмотрим на контракт Illuminate\Contracts\Auth\UserProvider :
Метод retrieveById служит для получения пользователя из базы данных по его ID. Реализация класса Authenticatable должна быть возвращена в ответ методом.
Метод updateRememberToken обновляет токен пользователя. Новый токен может быть как снова созданным при аутентификации пользователя, так и null — при выходе пользователя.
Контракт Authenticatable
События
Laravel запускает различные события в процессе процедуры аутентификации. Вы можете встроиться в процесс при помощи слушателей этих событий в вашем EventServiceProvider :