Remember token laravel для чего
Laravel Framework Russian Community
Конфигурация
Примечание: Перед тем как начать, пожалуйста, убедитесь, что таблица users (или другая, в которой хранятся пользователи) содержит nullable (с возможностью содержать NULL) столбец remember_token длиною 100 символов (VARCHAR(100)). Этот столбец испольдуется для хранения токена, когда пользователь при логине ставит галку «запомнить меня».
Хранение паролей
Класс Hash содержит методы для безопасного хэширования с помощью Bcrypt.
Хэширование пароля по алгоритму Bcrypt:
Проверка пароля по хэшу:
Проверка на необходимость перехэширования пароля:
Аутентификация пользователей
Заметьте, что поле email не обязательно и оно используется только для примера. Вы должны использовать любое поле, которое соответствует имени пользователя в вашей БД. Метод Redirect::intended отправит пользователя на URL, который он пытался просмотреть до того, как запрос был перехвачен фильтром аутентификации. Также в этом методе можно задать дополнительный URL, куда будет осуществлен переход, если первый URL не доступен.
Проверка авторизации пользователя
Имеет ли пользователь токен «запомнить меня»
Метод viaRemember позволяет узнать, вошел ли пользователь при помощи фичи «запомнить меня».
Авторизация пользователя с использованием условий
Вы также можете передать дополнительные условия для запроса к таблице:
Примечание Для повышения безопасности после аутентификации фреймворк регенерирует ID сессии пользователя.
Доступ к залогиненному пользователю
Как только пользователь аутентифицирован, вы можете обращаться к модели User и её свойствам.
Чтобы получить ID залогиненого пользователя, воспользуйтесь методом id :
Для простой аутентификации пользователя по ID используется метод loginUsingId :
Проверка данных для входа без авторизации
Метод validate позволяет вам проверить данные для входа без осуществления самого входа.
Аутентификация пользователя на один запрос
Вы также можете использовать метод once для авторизации пользователя в системе только для одного запроса. Сессии и cookies не будут использованы.
Выход пользователя из приложения
Ручная авторизация
Если вам нужно войти существующим пользователем, просто передайте его модель в метод login :
Аутентификация и роутинг
Защита роута аутентификацией
Защита от подделки запросов (CSRF)
Laravel предоставляет простой способ защиты вашего приложения от подделки межсайтовых запросов (cross-site request forgeries, CSRF).
Вставка CSRF-ключа в форму
Проверка переданного CSRF-ключа
HTTP-аутентификация
Защита роута фильтром HTTP-аутентификации
По умолчанию, фильтр basic будет использовать поле email модели объекта при аутентификации. Если вы хотите использовать иное поле, можно передать его имя первым параметром методу basic в файле app/filters.php :
Авторизация без запоминания состояния
Сброс забытого пароля
Модель и таблица
Реализация RemindableInterface
Создание таблицы токенов сброса пароля
Контроллер восстановления пароля
Простейший пример password.remind :
Для модификации собщения, которое уйдет пользователю на почту, вы можете изменить в контроллере вызов Password::remind на, например, такое:
Валидация паролей
Шифрование
Laravel предоставляет функции устойчивого шифрования по алгоритму AES с помощью расширения mcrypt для PHP.
Шифрование строки
Расшифровка строки
Изменение режима и алгоритма шифрования
Вы также можете установить свой алгоритм и режим шифрования:
Драйвера аутентификации
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: Что такое «remember_token» в таблице «users» DB?
Безопасно ли использовать remember_token в таблице users для аутентификации пользователя в приложении?
Какова цель этого токена? В настоящее время я использую его в формах, чтобы проверить, вошел ли пользователь в систему – если токен отсутствует, я показываю экран входа. Каждый раз, когда пользователь выходит из системы, этот токен восстанавливается.
Обратитесь к этой документации:
Мне пришлось добавить remember_token в мою миграцию таблицы пользователей, чтобы Auth::logout() работал правильно.
Добавлено remember_token для моих миграций как таковых.
Из командной строки вы должны отбросить таблицу пользователей, а затем перенести/семя.
Laravel предоставляет токен CSRF в скрытом входе, который он автоматически добавляет и проверяет, когда будет отправлена форма, независимо от того, вошли ли вы в систему или нет. Если вы используете их построитель форм, это происходит без необходимости даже проверять его.
Даже если это старый вопрос, я хотел бы представить вариант не использовать токен, если он вам не нужен (например, на вашем сайте не помню).
Вместо добавления фиктивного столбца в таблицу users вы можете просто запретить Auth :: logout() установить его.
Просто добавьте это в свою модель пользователя (работает с Laravel 5.6):
Это удаляет столбец “remember_token” непосредственно перед тем, как модель будет сохранена и, таким образом, предотвратит появление ошибки из-за несуществующего столбца.
Аутентификация
Введение
Хотите сразу попробовать? Просто выполните команды sh php artisan make:auth и sh php artisan migrate в свежем приложении Laravel. Затем откройте в браузере http://your-app.dev/register или любой другой URL, назначенный вашему приложению. Эти команды создадут заготовку для всей вашей системы аутентификации!
Провайдеры определяют то, как пользователи извлекаются из вашего постоянного хранилища. Laravel поставляется с поддержкой извлечения пользователей с помощью Eloquent и конструктора запросов БД. Но при необходимости вы можете определить для своего приложения дополнительные провайдеры.
Не переживайте, если сейчас это звучит запутанно! Для многих приложений никогда не потребуется изменять стандартные настройки аутентификации.
Требования для базы данных
При создании схемы базы данных для модели App\User создайте столбец для паролей с длиной не менее 60 символов. Хорошим выбором для строкового столбца будет длина 255 символов.
Краткое руководство по аутентификации
RegisterController обрабатывает регистрацию нового пользователя, LoginController обрабатывает аутентификацию, ForgotPasswordController обрабатывает отправку по почте ссылок для сброса паролей, ResetPasswordController содержит логику для сброса паролей.
AuthController обрабатывает регистрацию и аутентификацию нового пользователя, а PasswordController содержит логику для помощи существующим пользователям при сбросе забытых паролей.
Каждый из этих контроллеров использует типажи для подключения необходимых методов. Для многих приложений вам вообще не придётся изменять эти контроллеры.
Маршрутизация
Laravel обеспечивает быстрый способ создания заготовок всех необходимых для аутентификации маршрутов и представлений с помощью одной команды:
Эту команду надо использовать на свежем приложении, она установит представление макета, представления для регистрации и входа, а также маршруты для всех конечных точек аутентификации. Также будет сгенерирован HomeController для обслуживания запросов к панели настроек вашего приложения после входа.
По умолчанию в Laravel нет маршрутов для запросов к контроллерам аутентификации. Вы можете добавить их вручную в файле app/Http/routes.php :
Представления
Пример формы аутентификации
Пример формы регистрации
Аутентификация
Теперь, когда у вас есть маршруты и представления для имеющихся контроллеров аутентификации, вы готовы регистрировать и аутентифицировать новых пользователей своего приложения. Вы можете просто перейти по этим маршрутам в браузере, поскольку контроллеры аутентификации уже содержат логику (благодаря их типажам) для аутентификации существующих пользователей и сохранения новых пользователей в базе данных.
Изменение пути
Если для генерирования пути для переадресации необходима дополнительная логика, вы можете определить метод PHP redirectTo () вместо свойства redirectTo :
Изменение пользователя
Когда аутентификация пользователя не успешна, он автоматически будет перенаправлен обратно на форму входа.
Чтобы изменить место для перенаправления после выхода из приложения, вы можете задать свойство redirectAfterLogout контроллера AuthController :
Изменение защитника
Настройка хранилища/проверки ввода
Чтобы изменить требуемые поля для формы регистрации нового пользователя, или для изменения способа добавления новых пользователей в вашу базу данных, вы можете изменить класс RegisterController (для версии 5.2 — AuthController ). Этот класс отвечает за проверку ввода и создание новых пользователей в вашем приложении.
Получение аутентифицированного пользователя
Вы можете обращаться к аутентифицированному пользователю через фасад Auth :
Определение, аутентифицирован ли пользователь
Защита маршрутов
Посредник Route можно использовать, чтобы давать доступ к определённому маршруту только аутентифицированным пользователям.
Конечно, если вы используете контроллеры, вы можете вызвать метод PHP middleware () из конструктора контроллера, вместо присоединения его напрямую к определению маршрута:
Указание защитника
Во время прикрепления посредника auth к маршруту, вы можете также указать, какой защитник должен быть использован для аутентификации пользователя. Указанный защитник должен соответствовать одному из ключей в массиве guards вашего файла auth.php :
Во время прикрепления посредника auth к маршруту, вы можете также указать, какой защитник должен быть использован для выполнения аутентификации:
Блокировка входа
Блокировка аутентификации
Ручная аутентификация
Если вы не хотите использовать встроенные контроллеры аутентификации, вам нужно будет напрямую управлять аутентификацией пользователей, используя классы аутентификации Laravel. Не волнуйтесь, они не кусаются!
Метод PHP intended () «переадресатора» перенаправит пользователя к тому URL, к которому он обращался до того, как был перехвачен посредником аутентификации. В этот метод можно передать запасной URI, на случай недоступности требуемого пути.
Указание дополнительных условий
При необходимости вы можете добавить дополнительные условия к запросу аутентификации, помимо адреса e-mail и пароля. Например, можно проверить отметку «активности» пользователя:
В этих примерах email не является обязательным вариантом, он приведён только для примера. Вы можете использовать какой угодно столбец, соответствующий «username» в вашей базе данных.
Обращение к конкретным экземплярам защитника
С помощью метода PHP guard () фасада Auth вы можете указать, какой экземпляр защитника необходимо использовать. Это позволяет управлять аутентификацией для отдельных частей вашего приложения, используя полностью отдельные модели для аутентификации или таблицы пользователей.
Передаваемое в метод PHP guard () имя защитника должно соответствовать одному из защитников, настроенных в файле auth.php :
Завершение сессии
Запоминание пользователей
Другие методы аутентификации
Аутентификация экземпляра пользователя
Конечно, вы можете указать, какой экземпляр защитника надо использовать:
Аутентификация пользователя по ID
Проверка данных пользователя без входа в систему
Метод PHP validate () позволяет проверять учётные данные пользователя без фактического входа в приложение:
Вход пользователя для одного запроса
Вы также можете использовать метод PHP once () для пользовательского входа в систему для одного запроса. Сеансы и cookies не будут использоваться, что может быть полезно при создании API без состояний (stateless API):
Простая HTTP-аутентификация
HTTP Basic Authentication — простой и быстрый способ аутентификации пользователей вашего приложения без создания дополнительной страницы входа. Для начала прикрепите посредника auth.basic к своему маршруту. Этот посредник встроен в Laravel, поэтому вам не надо определять его:
Замечание по FastCGI
Простая Stateless HTTP-аутентификация
Сброс и изменение паролей
В документации по ветке 5.3 и далее данный раздел статьи был вынесен в отдельную статью — Сброс пароля — прим. пер.
Требования для базы данных
Большинство веб-приложений предоставляет пользователям возможность сбросить их забытые пароли. Вместо того, чтобы постоянно реализовывать это в каждом новом приложении, Laravel предлагает удобные методы для отправки писем о сбросе пароля и выполнении самого сброса.
Создание миграции для таблицы сброса паролей
Маршрутизация
Все необходимые для сброса пароля маршруты можно сгенерировать с помощью Artisan-команды sh make:auth :
Но вам надо определить маршруты для запросов к этому контроллеру:
Представления
Пример формы запроса ссылки для сброса пароля
Пример формы сброса пароля
Вот пример формы сброса пароля:
После сброса пароля
Когда вы определили маршруты и представления для сброса паролей пользователей, вы можете просто обратиться к данному маршруту через браузер ( /password/reset ). Встроенный в фреймворк PasswordController содержит логику отправки сообщений со ссылкой для сброса пароля, а также логику обновления паролей в базе данных.
Настройка
Настройка защитника аутентификации
Настройка брокера паролей
Добавление собственных защитников
Социальная аутентификация
Для версии 5.2 и выше данный раздел перенесён на GitHub — прим. пер.
В дополнение к обычной аутентификации на основе формы, Laravel также предоставляет простой и удобный способ аутентификации с помощью провайдеров OAuth, используя Laravel Socialite. Socialite в настоящее время поддерживает аутентификацию через Facebook, Twitter, LinkedIn, Google, GitHub и Bitbucket.
Чтобы начать работать с Socialite, добавьте зависимость в свой файл composer.json :
Настройка
Также добавьте фасад Socialite в массив aliases в файле app :
Основы использования
Теперь можно аутентифицировать пользователей! Вам будут нужны два маршрута: один для перенаправления пользователя на провайдер OAuth, и второй для получения обратного вызова от провайдера после аутентификации. Мы обратимся к Socialite через фасад Socialite :
Само собой, вам необходимо определить маршруты для ваших методов контроллера:
Некоторые из провайдеров OAuth поддерживают необязательные параметры в запросе переадресации. Чтобы включить какие-либо необязательные параметры в запрос, вызовите метод PHP with () с ассоциативным массивом:
Получение пользовательских данных
Когда у вас есть экземпляр пользователя, вы можете получить более подробную информацию о пользователе:
Добавление собственных провайдеров пользователей
Если вы не используете традиционную реляционную базу данных для хранения ваших пользователей, вам необходимо добавить в Laravel свой собственный провайдер аутентификации пользователей. Мы используем метод PHP provider () фасада Auth для определения своего драйвера:
И наконец, вы можете использовать этот провайдер в вашей настройке ‘guards’ :
Добавление драйверов аутентификации
Данный раздел статьи добавлен в документацию для версии 5.1.
Для версий 5.2 и выше и 5.0 и ниже он неактуален.
Если вы не используете традиционную реляционную базу данных для хранения ваших пользователей, вам необходимо добавить в Laravel свой собственный драйвер аутентификации. Мы используем метод PHP extend () фасада Auth для определения своего драйвера. Вам надо поместить этот вызов метода PHP extend () в сервис-провайдер:
Контракт User Provider
Реализации Illuminate\Contracts\Auth\UserProvider отвечают только за извлечение реализаций Illuminate\Contracts\Auth\Authenticatable из постоянных систем хранения, таких как MySQL, Riak, и т.п. Эти два интерфейса позволяют механизмам аутентификации Laravel продолжать функционировать независимо от того, как хранятся данные пользователей и какой тип класса использован для их представления.
Давайте посмотрим на контракт Illuminate\Contracts\Auth\UserProvider :
Контракт Authenticatable
События
Laravel генерирует различные события в процессе аутентификации. Вы можете прикрепить слушателей к этим событиям в вашем EventServiceProvider :