Авторизация (Laravel 6.x) — Laravel Framework Russian Community

Авторизация в ресурсных котроллерах

Если вы используете ресурсные контроллеры, вы можете упростить написание авторизации, использовав authorizeResource в конструкторе такого контроллера.

authorizeResource принимает название класса модели в качестве первого аргумента и имя роута / параметр запроса, который содержит ID экземпляра этой модели в качестве второго аргумента:

Аутентификация – laravel docs ru

HTTP-Basic аутентификация обеспечивает быстрый способ аутентификации пользователей без настройки специальной страницы входа. Для начала добавьте посредникаauth.basic к вашему маршруту. Посредник auth.basic включен в фреймворк Laravel, так что вам не нужно его определять:

Аутентификация пользователя по id

Для входа пользователя в приложение по его ID, используйте метод loginUsingId. Этот метод просто принимает первичный ключ пользователя, которого необходимо аутентифицировать:

Auth::loginUsingId(1);


Auth::loginUsingId(1, true);

Базовое использование

Теперь вы готовы к аутентификации пользователей! Вам нужно создать два роута: один для редиректа пользователя к провайдеру OAuth, и ещё один для получения callback от провайдера после аутентификации. Доступ к Socialite можно получить при помощи фасадаSocialite:

Валидация / настройка хранилища

Чтобы изменить поля формы, которые необходимы при регистрации нового пользователя в приложении, или настроить, каким образом новые пользователи хранятся в базе данных, вы можете изменить класс RegisterController. Этот класс отвечает за проверку и создание новых пользователей приложения.

Метод validator в RegisterController содержит правила проверки новых пользователей приложения. Вы можете изменить этот метод, как вам хочется.

Действия которые не требуют моделей

Опять же, некоторые действия, такие как create, не могут требовать экземпляр модели. В таких ситуациях, вы можете передать в посредник имя класса. Имя класса будет использоваться для определения того, какие политики будут использоваться при авторизации действия:

Route::post('/post', function(){
    
})->middleware('can:create,AppPost');

Дополнительные условия прохождения аутентификации

Если хотите, вы также можете добавить дополнительные условия прохождения аутентификации в дополнение к e-mail и паролю. Например, вы можете проверять, активен ли пользователь:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    
}

Обратите внимание: В этих примерах поле email не обязательно должно использоваться для поиска пользователя, оно выбрано для примера. Вы можете использовать любое поле для поиска пользователя, которое является уникальным в таблице пользователей вашей базы данных.

Дополнительный контекст

Методы авторизации (allows, denies, check, any, none, authorize, can, cannot) и директивы авторизации Blade (@can, @cannot, @canany) вторым аргументом могут принимать массивы.

Доступ к определённым экземплярам guard

C помощью метода guard фасада Auth, вы можете указать, какой экземпляр Guard вы хотели бы использовать. Это позволяет управлять аутентификацией для отдельных частей приложения с использованием совершенно разных моделей или таблиц аутентификации пользователя.

Имя охранник передаваемое методу guard должно соответствовать одному из Guard’ов, настроенных в файле конфигурации auth.php

Изменение пути

Когда пользователь успешно аутентифицируется, он будет перенаправлен на URI /home. Вы можете изменить место для перенаправления после входа, задав свойство redirectTo контроллеров LoginController, RegisterController и ResetPasswordController:

protected $redirectTo = '/';

Если для пути перенаправления требуется собственная логика генерации, можно задать метод redirectTo вместо свойства redirectTo:

protectedfunctionredirectTo(){
    return'/path';
}

Метод redirectTo имеет приоритет над атрибутом redirectTo.

Назначение гарда

Когда вы назначаете middleware auth для защиты роута, вы можете явно указать, какой guard из тех, что определены у вас в config/auth.php вы хотите использовать в данном случае:

Route::get('profile', [
    'middleware' => 'auth:api',
    'uses' => 'ProfileController@show'
]);

Настройка

После установки Socialite зарегистрируйте сервис-провайдер LaravelSocialiteSocialiteServiceProvider в конфигурационном файле config/app.php:

'providers' => [
    

    LaravelSocialiteSocialiteServiceProvider::class,
],

Также добавьте фасад Socialite в массив aliases конфигурации:

'Socialite' => LaravelSocialiteFacadesSocialite::class,

Настройка гардов

В config/auth.php вы можете определить несколько гардов. Чтобы использовать выбранный гард для процедуры восстановления пароля, добавьте свойство в класс PasswordController:

Настройка гардов (guards)

Вы также можете назначить специфичный гард для обработки процесса аутентификации. Для этого создайте свойство guard в вашем классе AuthController. Значением этого свойства должно быть название одного из гардов, определённых вами в файле config/auth.php.

Настройка гварда

Вы также можете изменить “гварда”, который используется для аутентификации и регистрации пользователей. Для начала задайте метод guard в LoginController, RegisterController и ResetPasswordController. Метод должен возвращать экземпляр гварда:

useIlluminateSupportFacadesAuth;

protectedfunctionguard(){
    return Auth::guard('guard-name');
}

Определение guard

При привязке посредника auth к маршруту, вы можете также указать, какой конкретно Guard должен использоваться для аутентификации пользователя. Указанный Guard должен соответствовать одному из ключей в массиве guards файла config/auth.php:

publicfunction__construct(){
    $this->middleware('auth:api');
}

Если вы используете встроенный в Laravel класс LoginController, то IlluminateFoundationAuthThrottlesLogins трейт уже будет включена в ваш контроллер. По умолчанию, пользователь не сможет войти в систему в течение одной минуты, если они не предоставил правильные учетные данные несколько раз подряд. Применение ограничения является уникальным для сочетания имени пользователя/адреса почты и IP-адреса.

это место оказалось довольно сложным для перевода, так как английское слово throttling не имеет адекватного русского аналога, в полной мере отражающего смысл в текущем контексте – п.п.

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

Мы будем получать доступ к службе аутентификации Laravel через фасадAuth, так что мы должны убедиться, что импортировали Auth в верхней части файла. Теперь, давайте попробуем применить метод attempt:

Получение деталей о пользователе

После получения экземпляра пользователя вы можете получить дополнительные данные о нём:

Пример формы запроса ссылки сброса пароля

Вам нужно создать HTML шаблон формы запроса сброса пароля. Этот шаблон должен находиться в resources/views/auth/password.blade.php. Форма содержит единственное поле E-mail адреса, позволяющее запросить ссылку сброса пароля:

Пример формы сброса пароля

Когда пользователь кликает на ссылку в письме сброса пароля, он попадает на страницу с формой сброса пароля. Шаблон этой страницы должен находиться в resources/views/auth/reset.blade.php.

Пример формы сброса пароля:

Проверка аутентифицирован ли текущий пользователь

Для того, чтобы определить, является ли пользователь аутентифицированным, вы можете использовать метод check фасада Auth, который вернет true, если пользователь прошел проверку подлинности:

useIlluminateSupportFacadesAuth;

if (Auth::check()) {
    
}

Создание миграции таблицы токенов сброса паролей

Дальше вам необходимо создать таблицу, в которой будут храниться токены сброса паролей. Эта миграция по умолчанию уже включена в Laravel в каталог database/migrations. Поэтому вам остаётся только мигрировать базу данных:

php artisan migrate

Laravel предоставляет класс AuthPasswordController, в котором содержится вся необходимая логика для сброса паролей. Для создания роутов и шаблонов вам нужно воспользоваться командой:

php artisan make:auth

Эта же команда создает в папке resources/views/auth/passwords шаблоны для страниц восстановления пароля.

После того, как вы определили роуты и шаблоны для сброса паролей, можете проверить их в браузере, пройдя по урлу /password/reset. Класс PasswordController включён в фреймворк по умолчанию и содержит всю необходимую логику для отправки писем и сброса паролей в базе данных.

После сброса пароля пользователь автоматически аутентифицируется в вашем приложении и редиректится на страницу /home. Вы можете изменить этот путь, создав свойство redirectTo у PasswordController

protected $redirectTo = '/dashboard';

Обратите внимание: По умолчанию токен сброса пароля существует 1 час. Вы можете изменить это в конфигурационном файле config/auth.php с помощью опции expire.

Похожее:  Транзакция – что это простыми словами

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *