Безопасность (Laravel 4.1) — Laravel Framework Russian Community

Авторизация пользователя с использованием условий

Вы также можете передать дополнительные условия для запроса к таблице:

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

Примечание Для повышения безопасности после аутентификации фреймворк регенерирует ID сессии пользователя.

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

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

Auth::loginUsingId(1);


Auth::loginUsingId(1, true);

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

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

Валидация паролей

По умолчанию Password::reset валидирует пароль пользователя исходя из двух правил – введенные пароли должны совпадать и пароль должен быть больше или равен 6 символам. Если вы хотите расширить валидацию паролей, вы можете определить свой Password::validator:

Password::validator(function($credentials){
	return strlen($credentials['password']) >= 6;
});

Примечание Токены сброса пароля валидны в течении одного часа. Вы можете изменить это в app/config/auth.php, параметр reminder.expire.

Laravel предоставляет функции устойчивого шифрования по алгоритму AES с помощью расширения mcrypt для PHP.

Выход из приложения

Auth::logout();

Конечно, если вы используете встроенные контроллеры Laravel для аутентификации, то в них всё это уже реализовано.

Выход пользователя из приложения

Auth::logout();

Если вам нужно войти существующим пользователем, просто передайте его модель в метод login:

Дополнительная настройка

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

Метод validator класса AuthController содержит в себе правила валидации формы регистрации новых пользователей. Вы можете изменять его, как пожелаете.

Защита от подделки запросов (csrf)

Laravel предоставляет простой способ защиты вашего приложения от подделки межсайтовых запросов (cross-site request forgeries, CSRF).

Защита роута аутентификацией

Route::get('profile', array('before' => 'auth', function(){
	
}));

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

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

protected $redirectTo = '/';

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

protectedfunctionredirectTo(){
    return'/path';
}

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

Изменение режима и алгоритма шифрования

Вы также можете установить свой алгоритм и режим шифрования:

Crypt::setMode('ctr');

Crypt::setCipher($cipher);

Имеет ли пользователь токен “запомнить меня”

Метод viaRemember позволяет узнать, вошел ли пользователь при помощи фичи “запомнить меня”.

if (Auth::viaRemember())
{
	
}

Контроллер восстановления пароля

Чтобы автоматически создать контроллер восстановления пароля, воспользуйтесь командой auth:reminders-controller. В папке controllers будет создан RemindersController.php:

php artisan auth:reminders-controller

Созданный контроллер содержит метод getRemind, который показывает форму для напоминания пароля. Вам надо создать эту форму во вьюхе password.remind (файл remind.blade.php в папке views/password – см. view). Форма должна отправлять POST c email на метод postRemind

Простейший пример password.remind:

Модель и таблица

Большинство веб-приложения позволяют пользователям сбросить забытый пароль. Вместо того, чтобы каждый раз изобретать велосипед, Laravel предоставляет удобный механизм для реализации этой возможности.

Настройка

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

'providers' => [
    

    LaravelSocialiteSocialiteServiceProvider::class,
],

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

'Socialite' => LaravelSocialiteFacadesSocialite::class,

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

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

useIlluminateSupportFacadesAuth;

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

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

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

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

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

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

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

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

Проверка авторизации пользователя

Для определения того, авторизован ли пользователь или нет, можно использовать метод check.

if (Auth::check())
{
	
}

Проверка данных для входа без авторизации

Метод validate позволяет вам проверить данные для входа без осуществления самого входа.

if (Auth::validate($credentials))
{
	
}

Проверка на необходимость перехэширования пароля:

if (Hash::needsRehash($hashed))
{
	$hashed = Hash::make('secret');
}

Для аутентификации пользователя в вашем приложении вы можете использовать метод Auth::attempt.

if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
	return Redirect::intended('dashboard');
}

Заметьте, что поле email не обязательно и оно используется только для примера. Вы должны использовать любое поле, которое соответствует имени пользователя в вашей БД. Метод Redirect::intended отправит пользователя на URL, который он пытался просмотреть до того, как запрос был перехвачен фильтром аутентификации. Также в этом методе можно задать дополнительный URL, куда будет осуществлен переход, если первый URL не доступен.

Когда вызывается метод attempt, запускается событиеauth.attempt. При успешной авторизации также запускается событие auth.login.

Проверка пароля по хэшу:

if (Hash::check('secret', $hashedPassword))
{
	
}

Проверка переданного csrf-ключа

Route::post('register', array('before' => 'csrf', function(){
    return'Вы передали верный ключ!';
}));

Расшифровка строки

$decrypted = Crypt::decrypt($encryptedValue);

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

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

php artisan migrate

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


Route::get('password/email', 'AuthPasswordController@getEmail');
Route::post('password/email', 'AuthPasswordController@postEmail');


Route::get('password/reset/{token}', 'AuthPasswordController@getReset');
Route::post('password/reset', 'AuthPasswordController@postReset');

В дополнение к определению роутов к PasswordController вы должны создать шаблоны, которые будет отображать ваш контроллер. Не беспокойтесь, ниже предоставлены примеры таких шаблонов. Вы вольны стилизировать их под свои нужды.

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

Далее, должна быть создана таблица для хранения токенов запросов сброса пароля. Для создания такой таблицы существует artisan-команда auth:reminders-table.

php artisan auth:reminders-table

php artisan migrate

Указание гварда

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

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

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

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

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

Хэширование пароля по алгоритму bcrypt:

$password = Hash::make('secret');

Шифрование строки

$encrypted = Crypt::encrypt('секрет');

Примечание: обязательно установите 16, 24 или 32-значный ключ key в файле app/config/app.php. Если этого не сделать, зашифрованные строки не будут достаточно надежными.

Похожее:  Как пользоваться MSI Center -

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

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