Метод hasUser
Метод hasUser класса Auth проверяет, был ли установлен объект пользователя
в текущий экземпляр аутентификации через методы login, loginUsingId или
setUser. В отличие от метода check, который проверяет наличие
аутентифицированного пользователя в сессии, hasUser проверяет только
локально установленного пользователя в памяти текущего запроса.
Метод возвращает true, если пользователь установлен, и false в противном случае.
Этот метод полезен при работе с кастомной аутентификацией или при проверке
состояния авторизации без обращения к хранилищу сессий.
Синтаксис
<?php
use Illuminate\Support\Facades\Auth;
$hasUser = Auth::hasUser();
?>
Пример
Давайте проверим, установлен ли пользователь после успешного входа:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
class AuthController extends Controller
{
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
$hasUser = Auth::hasUser();
echo $hasUser ? 'true' : 'false';
}
}
}
?>
Результат выполнения кода при успешной аутентификации:
"true"
Пример
Сравним работу методов hasUser и check при установке пользователя вручную:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
class UserController extends Controller
{
public function checkUser()
{
$user = User::find(1);
Auth::setUser($user);
$hasUser = Auth::hasUser(); // true
$isChecked = Auth::check(); // false
echo "hasUser: " . ($hasUser ? 'true' : 'false') . "\n";
echo "check: " . ($isChecked ? 'true' : 'false');
}
}
?>
Результат выполнения кода:
"hasUser: true"
"check: false"
Как видно из примера, hasUser возвращает true, так как пользователь
установлен через setUser, а check возвращает false,
потому что аутентификация не сохранена в сессии.
Пример
Используем hasUser для проверки перед выполнением действия в middleware:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class CheckUserMiddleware
{
public function handle(Request $request, Closure $next)
{
if (!Auth::hasUser()) {
return redirect('/login');
}
return $next($request);
}
}
?>