Метод setUser
Метод setUser класса Auth устанавливает переданный экземпляр пользователя как текущего аутентифицированного пользователя для указанного или стандартного guard. Метод принимает объект, реализующий интерфейс Authenticatable, и опционально имя guard. После вызова метода все последующие обращения к Auth::user или вспомогательной функции auth будут возвращать установленного пользователя. Это особенно удобно в модульных тестах, когда нужно симулировать аутентифицированного пользователя без выполнения реального процесса входа.
Синтаксис
<?php
use Illuminate\Support\Facades\Auth;
// Установка пользователя для стандартного guard
Auth::setUser($user);
// Установка пользователя для конкретного guard
Auth::guard('admin')->setUser($user);
?>
Пример
Давайте установим пользователя в текущий контекст аутентификации с помощью метода setUser:
<?php
use Illuminate\Support\Facades\Auth;
use AppModelsUser;
// Получаем пользователя из базы данных
$user = User::find(1);
// Устанавливаем пользователя как аутентифицированного
Auth::setUser($user);
// Получаем текущего пользователя
$currentUser = Auth::user();
echo $currentUser->name;
?>
Результат выполнения кода:
"John Doe"
Пример
Давайте используем метод setUser в контроллере для программной установки пользователя:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
use AppModelsUser;
class UserController extends Controller
{
public function setUserAsAuthenticated($userId)
{
$user = User::find($userId);
if ($user) {
Auth::setUser($user);
return response()->json([
'message' => 'User set as authenticated',
'user' => Auth::user()->name
]);
}
return response()->json([
'message' => 'User not found'
], 404);
}
}
?>
Результат выполнения кода при успешной установке пользователя:
{"message":"User set as authenticated","user":"John Doe"}
Пример
Давайте используем метод setUser для разных guard в Laravel:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
use AppModelsUser;
use AppModelsAdmin;
class AuthController extends Controller
{
public function setUsersForGuards()
{
// Устанавливаем пользователя для стандартного guard
$user = User::find(1);
Auth::setUser($user);
// Устанавливаем пользователя для admin guard
$admin = Admin::find(1);
Auth::guard('admin')->setUser($admin);
// Получаем пользователей из разных guard
$standardUser = Auth::user();
$adminUser = Auth::guard('admin')->user();
echo $standardUser->name;
echo $adminUser->name;
}
}
?>
Результат выполнения кода:
"John Doe"
"Admin"