Метод logoutOtherDevices
Метод logoutOtherDevices класса Auth предназначен для завершения сессий пользователя на всех других устройствах, кроме текущего. Первым параметром метод принимает текущий пароль пользователя для подтверждения операции. Вторым параметром передается имя защитного механизма (guard). Если guard не указан, используется guard по умолчанию. Метод возвращает true при успешном завершении сессий, либо выбрасывает исключение AuthenticationException, если пароль неверен.
Синтаксис
<?php
Auth::logoutOtherDevices($password, $guard);
?>
Пример использования в контроллере
Давайте реализуем метод в контроллере, который завершает сессии на всех других устройствах:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
class ProfileController extends Controller
{
public function logoutOtherDevices(Request $request)
{
$request->validate([
'password' => ['required', 'current_password'],
]);
Auth::logoutOtherDevices($request->password);
return redirect('/profile')->with('status', 'Other devices logged out successfully');
}
}
?>
Пример обработки исключения
Рассмотрим пример с обработкой ошибки при неверном пароле:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\AuthenticationException;
class ProfileController extends Controller
{
public function logoutOtherDevices(Request $request)
{
$request->validate([
'password' => ['required'],
]);
try {
Auth::logoutOtherDevices($request->password);
return redirect('/profile')->with('status', 'Other devices logged out successfully');
} catch (AuthenticationException $e) {
throw ValidationException::withMessages([
'password' => __('auth.password'),
]);
}
}
}
?>
Пример с указанием guard
Пример использования метода с явным указанием guard:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ProfileController extends Controller
{
public function logoutOtherDevices(Request $request)
{
$request->validate([
'password' => ['required', 'current_password:admin'],
]);
Auth::logoutOtherDevices($request->password, 'admin');
return redirect('/admin/profile')->with('status', 'Other admin devices logged out');
}
}
?>
Пример в шаблоне Blade
Пример формы для вызова метода logoutOtherDevices:
<form method="POST" action="{{ route('profile.logout-other-devices') }}">
@csrf
<div>
<label for="password">Current Password</label>
<input type="password" id="password" name="password" required>
@error('password')
<span>{{ $message }}</span>
@enderror
</div>
<button type="submit">Logout Other Devices</button>
</form>
@if (session('status'))
<div>
{{ session('status') }}
</div>
@endif
Результат выполнения кода:
"Other devices logged out successfully"