Sanctum guard для Authorization: Bearer Token

Sanctum guard для Authorization: Bearer Token

Пример использования кастомного Laravel Guard для авторизации пользователя по ключу Bearer без сохранения состояния.


В app\Providers\AuthServiceProvider.php добавляем обработчик для быстрого определения аутентификации через замыкание с помощью метода Auth::viaRequest. Далее получаем ключ вызвав метод $request->bearerToken(). Находим нужный ключ в таблице ключей доступа и переходим к поиску пользователя. На выход отдаем пользователя или null. Данное решение не претендует на звание правильного, но имеет место быть.

<?php

namespace App\Providers;

// use Illuminate\Support\Facades\Gate;
use App\Models\User;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The model to policy mappings for the application.
     *
     * @var array<class-string, class-string>
     */

    protected $policies = [
        //
    ];

    /**
     * Register any authentication / authorization services.
     */

    public function boot(): void
    {
       Auth::viaRequest('bearer_token', function (Request $request) {
            $bearer = $request->bearerToken();

            $token = DB::table('personal_access_tokens')
                ->where('token', hash('sha256', $bearer))
                ->first();
                  
            if ($token) {
                $user = User::find($token->tokenable_id);

                if ($user) {
                    return $user;
                }
            }

           return null;
       });
    }
}


Подробнее можно ознакомиться здесь.