Я использую промежуточное программное обеспечение auth: api паспорта laravel для аутентификации моих маршрутов api, для которых требуется токен-носитель для аутентификации. Я использую задания в очереди для множества задач в моем приложении, некоторые из этих заданий обращаются к этим корням api. Ниже приводится пример работы.
public function handle()
{
$this->data['foreign_id'] = (string) Str::uuid();
$activity = new Activity($this->data);
$activity->save();
ApiClient::postToApi('/feeds/activity', $this->data);
}
Клиентский код api используется для обработки внутренних запросов внутри приложения. Код можно увидеть ниже
public function postToApi($url, $data) {
$req = Request::create($url, 'POST', $data);
$req->headers->set('Authorization', 'Bearer '. $this->grabToken());
$req->headers->set('Accept', 'application/json');
try {
$res = app()->handle($req);
return $res;
} catch (Exception $e) {
return "not found";
}
}
Этот запрос создает запрос с токеном носителя, который генерируется с использованием текущего вошедшего в систему пользователя, чтобы запрос мог быть аутентифицирован.
$token = $user->createToken('Token Name')->accessToken;
Однако, поскольку этот вызов был отправлен заданием, у меня нет доступа к пользователю сеансов, это означает, что токен-носитель не может быть сгенерирован, и я получаю неаутентифицированное сообщение. Есть ли способ обойти это или это, чтобы я мог обойти промежуточное программное обеспечение при выполнении внутренних запросов? Спасибо.






Извлеките логику из контроллеров, перенесите ее на другой уровень, используя репозиторий шаблонов (отметьте этот ответ: https://stackoverflow.com/a/53708112/5458355)
Вызов логического уровня с его методом в заданиях.
Почему бы вам не вызвать действие непосредственно из команды вместо вызова API.