Как проверить, вошел ли пользователь в систему или нет Laravel

этот код в 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 () {})
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
179
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование по умолчанию

Используйте функцию 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']);
})

Дополнительные конфигурации для использования другого Auth Guard

По умолчанию 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
}

Но он по-прежнему возвращает значение userID null, даже если я правильно анализирую переменную.

Ibrahim Mahmoud 23.04.2024 15:40

Это значит, что вы не авторизованы? Что выводит вызов auth()->check()? Попробуйте поместить это в начало функции: dd(auth()->check());

rozsazoltan 23.04.2024 15:42

Ваш вопрос был не совсем ясен, но если вы не используете аутентификацию по умолчанию, вам нужно, например, переключить значение defaults.guard в файле config/auth.php с web на api. ИЛИ вы можете переопределить это локально, используя auth()->guard('api'). Тогда проверка будет выглядеть так: auth()->guard('api')->check(), а запрос будет выглядеть так: auth()->guard('api')->user().

rozsazoltan 23.04.2024 15:47

Я спросил чатGPT, он сказал мне изменить файл Kernal.php. Я использую Laravel 10x. Но в файле моего проекта нет ядра.

Ibrahim Mahmoud 23.04.2024 16:02

Другие вопросы по теме