этот код в Laravel, где я хочу использовать его в качестве API, чтобы показывать его каждому, кто посещает мое приложение. и я хочу получить идентификатор пользователя, когда он войдет в систему
public function show($displayType)
{
try {
$data = houses::where('displayType', $displayType)->paginate(5);
$user = auth()->user(); // Get the authenticated user
$userId = $user ? $user->id : null; // Check if user is authenticated and get the user ID
return response()->json([
'status' => true,
'message' => 'You have successfully retrieved data',
'data' => $data,
'user_id' => $userId, // Include the user ID in the response
]);
} catch (\Throwable $th) {
return response()->json([
'status' => false,
'message' => $th->getMessage(),
], 500);
}
}
Я хочу проверить, авторизован ли человек, посетивший мой сайт, или нет.
Но проблема в том, что когда я отправляю токен, возвращается нулевой идентификатор пользователя. вот как использовать мой запрос маршрута. // это мой маршрут, я использую его при проверке промежуточного программного обеспечения
Route::get('houses/{displayType}',[housesController::class, 'show']);
Route::middleware('auth:api')->group(function () {})






Используйте функцию check(), чтобы проверить, вошел ли пользователь в систему.
if (auth()->check()) {
// User is logged in
$user = auth()->user();
} else {
// User is not logged in
}
В Blade также доступны директивы для упрощенного вызова этих функций.
@auth
// The data only available for auth user
@endauth
// and
@guest
// Show content if unauthenticated
@endguest
Мы можем явно указать, что только вошедшие в систему пользователи могут получить доступ к маршрутам.
Route::get('houses/{displayType}', [HousesController::class, 'show'])
->middleware('auth'); // use middleware() function to add extra middleware to route
// or can use with group() function to can add extra middleware to more route
Route::middleware('auth')->group(function () {
Route::get('houses/{displayType}', [HousesController::class, 'show']);
})
По умолчанию Laravel применяет web аутентификацию на основе сеанса. Если вы хотите отступить от этого, вам необходимо правильно сообщить об этом Laravel через настройки. Если вы хотите использовать аутентификацию API на основе токенов для входа в систему по умолчанию, вам необходимо соответствующим образом изменить значение defaults.guard в config/auth.php согласно документации.
return [
'defaults' => [
'guard' => 'api', // here
],
'guards' => [
// default guard
'web' => [
'driver' => 'session',
'provider' => 'users',
],
// can use this
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => true,
],
],
];
Если вы предпочитаете не изменять это, у вас есть возможность переопределить это значение в каждом из ваших запросов с помощью функции Guard().
if (auth()->guard('api')->check()) {
// User is logged in
$user = auth()->guard('api')->user();
} else {
// User is not logged in
}
Это значит, что вы не авторизованы? Что выводит вызов auth()->check()? Попробуйте поместить это в начало функции: dd(auth()->check());
Ваш вопрос был не совсем ясен, но если вы не используете аутентификацию по умолчанию, вам нужно, например, переключить значение defaults.guard в файле config/auth.php с web на api. ИЛИ вы можете переопределить это локально, используя auth()->guard('api'). Тогда проверка будет выглядеть так: auth()->guard('api')->check(), а запрос будет выглядеть так: auth()->guard('api')->user().
Я спросил чатGPT, он сказал мне изменить файл Kernal.php. Я использую Laravel 10x. Но в файле моего проекта нет ядра.
Но он по-прежнему возвращает значение userID null, даже если я правильно анализирую переменную.