我正在使用laravel Passport的auth:api中间件来认证我的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;
但是,由于此呼叫是由作业发出的,因此我无法访问会话用户,因此这意味着无法生成任何承载令牌,并且得到未认证的消息。无论如何,还是有解决我完成内部请求时绕过中间件的方法?谢谢。
答案 0 :(得分:0)
使用模式存储库从控制器中提取逻辑,并将其带到另一层(检查此答案:https://stackoverflow.com/a/53708112/5458355)
在作业中使用他的方法调用逻辑层。