Пример использования кастомного 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;
});
}
}
Подробнее можно ознакомиться здесь.