Laravel Sanctum: столбец не найден: 1054 Неизвестный столбец 'api_token' в 'where clause'

Пакет : Sanctum

После генерации токена при запросе данных он выдает мне ошибку, подобную этой

Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'api_token' in   
'where clause' (SQL: select * from `users` where `api_token` = XAzuNGUeOJ8CXbIoGEWhBTtWIFr0lFr8jjwScXQ4B0Qxfmu
2cHm9LaUwGX96zy0AnXhLLcCnBFCodQaOlimit 1) in file

10 ответов

Перейдите в config/auth.php

и измените массив api в guards на пример sanctum:

 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'sanctum',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

Перейдите в routes->api.php и используйте это

Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });

вместо тогоRoute::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });

В api.php

      Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

В конфиге / auth.php

      'api' => [
    'driver' => 'sanctum',
    'provider' => 'users',
    'hash' => false,
],

После этого проблема будет устранена. Я загрузил код на свой GitHub. Https://github.com/ramseyjiang/laravel_8_api

В моем случае я перепутал сconfig\sanctum.phpфайл. В частности, я сменил охрану на'guard' => ['api'],.

возвращаясь к'guard' => ['web'],починил это. Не уверен, почему я изменил его в первую очередь.

Импортировать EnsureFrontendRequestsAreStatefulв kernel.php для проверки токена

      use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

class Kernel extends HttpKernel
{

    'api' => [
               ------
               EnsureFrontendRequestsAreStateful::class,
               ------
             ],
}

1. Итак, чтобы ответить на этот вопрос, после того, как я ломал голову, я решил очистить кеши приложений, конфигурации и маршрутов, что помогло мне.

        php artisan cache:clear

2. Вы можете запустить приведенный выше оператор в своей консоли, когда хотите очистить кеш приложения. Что он делает, так это то, что этот оператор очищает все кеши внутри storage\framework\cache.

        php artisan route:cache

3. Это очищает кеш вашего маршрута. Поэтому, если вы добавили новый маршрут или изменили контроллер маршрута или действие, вы можете использовать его для перезагрузки.

        php artisan config:cache
  • Таблица первого сброса personal_access_tokens
  • Вторая строка удаления, содержащая «%create_personal_access_tokens_table%» в миграции вашей таблицы.
  • В-третьих, снова выполните php artisan migrate .

Вы можете попробовать добавить «промежуточное ПО (auth:sanctum)» для своего маршрута api.

Пример:

      Route::middleware('auth:sanctum')->get('products', function() {
      //code
})->name('api.products');

Бежать

  1. Кэш php-мастера: очистить
  2. Конфигурация php-мастера: очистить
  3. Маршрут ремесленника php: очистить

Затем перезапустите Apache и Mysql (для XAMPP/WAMPP) и снова запустите команду artisan serve , она сработала для меня. Убедитесь, что вы сначала прочитали их документы.

Запустите миграцию, а затем проверьте, возникла ли проблема, либо users стол нет api_token поле или оно не определено в User модель внутри $fillable массив.

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