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');
Бежать
- Кэш php-мастера: очистить
- Конфигурация php-мастера: очистить
- Маршрут ремесленника php: очистить
Затем перезапустите Apache и Mysql (для XAMPP/WAMPP) и снова запустите команду artisan serve , она сработала для меня. Убедитесь, что вы сначала прочитали их документы.
Запустите миграцию, а затем проверьте, возникла ли проблема, либо users
стол нет api_token
поле или оно не определено в User
модель внутри $fillable
массив.