Laravel. Выход на других устройствах

Добавлено: 11/03/2019 12:04 |  Обновлено: 11/03/2019 12:07 |  Добавил: nick |  Просмотры: 241 Комментарии: 0
Вводная часть
В данном материале реализуем возможность выхода (logout) на других устройствах, кроме текущего. В Laravel этот функционал появился, начиная с версии 5.6. Для написания материала использовался Laravel 5.8.
После создания проекта в БД добавим таблицы для работы с пользователями с помощью команды:
php artisan migrate
Параметры для создания таблиц уже указаны в файлах из папки migrations. В результате в базе данных будут созданы три таблицы: migrations / password_resets / users.

Далее, в проекте нам нужно установить аутентификацию из коробки. Делается это с помощью команды:
php artisan make:auth
После чего в браузере вы можете увидеть следующую картинку: Далее откроем файл: web.php. Он находится в папке routes. Добавим туда новый маршрут “logout-others”:
Route::post('logout-others', function (Request $request) {
    
    if(Hash::check($request["password"], $request->user()->getAuthPassword())) {
        auth()->logoutOtherDevices($request["password"]);
        return redirect('/home')->with('status', 'Вышли на других устройствах');
    }
    else {
        return redirect('/home')->with('warning', 'Пароль не совпадает с текущим');
    }
});
Этот код отрабатывает, когда пользователь нажимает кнопку выхода на других устройствах. Здесь $request["password"] - это пароль пользователя, который он вводит перед тем как нажать на кнопку выхода на других устройствах. Обратите внимание, что здесь мы проверяем совпадает ли введенный пользователем пароль с сохраненным в БД паролем. Почему мы это делаем? А потому что без этой проверки функция logoutOtherDevices() перезапишет текущий пароль на введенный пользователем. То есть если пользователь введет свой же пароль с опечаткой и потом разлогинется на сайте, то уже не сможет зайти под своим старым паролем.

Также не забудьте в начале файла добавить строчку:
use Illuminate\Http\Request;
Далее в файле app/Http/Kernel.php найдите группу 'web' => [ … ] и в ней раскомментируйте строчку:
\Illuminate\Session\Middleware\AuthenticateSession::class,
Теперь нам осталось добавить форму для выхода на других устройствах на домашней странице пользователя.

Откроем файл вида home.blade.php (папка /resources/views). И в блок
добавим следующее содержимое:
@if (session('status'))
    <div class="alert alert-success" role="alert">
        {{ session('status') }}
    </div>
@endif
@if (session('warning'))
    <div class="alert alert-warning" role="alert">
        {{ session('warning') }}
    </div>
@endif


<form method="POST" action="{{ url('logout-others') }}">
    @csrf
    <div class="form-group row">
        <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Пароль') }}</label>

        <div class="col-md-6">
            <input class="form-control" id="password" type="password" name="password" required>
        </div>
    </div>
    <div class="form-group row mb-0">

        <div class="col-md-8 offset-md-4">
            <button type="submit" class="btn btn-primary">
                {{ __('Выйти на других устройствах') }}
            </button>
        </div>
    </div>

</form>
Здесь вначале идет вывод сообщения об успешном выходе на других устройствах и сообщения о несовпадении введенных паролей. Каждое из них выводится в зависимости от полученных данных из формы: если введенный пароль совпадает с текущим, то выводится первое сообщение, если не совпадает, то выводится второе. А далее идет форма с полем для ввода пароля и с кнопкой отправки пароля на сервер.

На этом все. Можно попробовать открыть сайт в разных браузерах и проверить результат своей работы.

Оставьте свой комментарий

Комментариев нет