Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Foks's avatar
Level 15

API with Laravel Sanctum?

Hi!

I'm currently developing an API for one of my apps, however, it's my first time doing so.

But when I test the API, with a token from Sanctum it breaks completely. Stack trace: https://paste.xevotech.com/ziquqeqege.sql

I've created a UserController for my API, it looks like this:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Resources\UserResource;
use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
     */
    public function index()
    {
        return UserResource::collection(User::all());
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

My routes/api.php

<?php

use App\Http\Controllers\Api\UserController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
Route::group(['middleware' => ['auth:api']], function() {
    Route::apiResource('users', UserController::class);
});

My UserResource.php

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}
0 likes
8 replies
CorvS's avatar

@foks Did you change the default Sanctum configuration? Your error says that a api_token column is expected on the users table. By default Sanctum creates a separate table for API tokens. Did you add the HasApiTokens trait to your User model?

Foks's avatar
Level 15

@corvs I didn't change the default config for Sanctum. Yes I have added the HasApiToken trait to my User model

Foks's avatar
Level 15

@corvs followed every step other than the adding middleware step. ( as it's for SPA's)

I test my API with PHPStorms HTTP-client-file.

Foks's avatar
Level 15

@corvs I'm on Laravel 8.36.2. The project started at Laravel 8.

CorvS's avatar
CorvS
Best Answer
Level 27

@foks Have you tried using the auth:sanctum middleware instead?

Foks's avatar
Level 15

No, but it worked. Thanks!

Please or to participate in this conversation.