Метод once
Метод once класса Auth выполняет аутентификацию
пользователя на один запрос, без сохранения состояния в сессии.
Это полезно для API-запросов, где используется токен-аутентификация,
или для однократных действий, где не требуется постоянная сессия.
Метод принимает массив с учетными данными (обычно email и пароль)
и возвращает true при успешной аутентификации или false
в противном случае.
Синтаксис
<?php
use Illuminate\Support\Facades\Auth;
$res = Auth::once($credentials);
?>
Пример
Давайте выполним однократную аутентификацию пользователя по email и паролю:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesAuth;
use IlluminateHttpRequest;
class AuthController extends Controller
{
public function loginOnce(Request $request)
{
$credentials = [
'email' => $request->email,
'password' => $request->password
];
if (Auth::once($credentials)) {
$user = Auth::user();
echo "Authenticated user: " . $user->name;
} else {
echo "Authentication failed";
}
}
}
?>
Пример
Проверим, является ли пользователь гостем после однократной аутентификации:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesAuth;
use IlluminateHttpRequest;
class AuthController extends Controller
{
public function checkOnce(Request $request)
{
$credentials = [
'email' => $request->email,
'password' => $request->password
];
if (Auth::once($credentials)) {
echo "User is authenticated for this request";
if (Auth::guest()) {
echo "But guest() returns true";
} else {
echo "And guest() returns false";
}
}
}
}
?>
Результат выполнения кода:
"User is authenticated for this request"
"But guest() returns true"
Пример
Используем метод once в контроллере API для получения данных пользователя:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesAuth;
use IlluminateHttpRequest;
use AppModelsUser;
class UserController extends Controller
{
public function getProfile(Request $request)
{
$credentials = [
'email' => $request->email,
'password' => $request->password
];
if (Auth::once($credentials)) {
$user = Auth::user();
$res = [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email
];
echo json_encode($res);
} else {
echo "Invalid credentials";
}
}
}
?>
Результат выполнения кода:
{"id":1,"name":"John Doe","email":"john@example.com"}