在内部使用auth:api中间件从作业中调用api路由

时间:2018-12-13 16:00:00

标签: laravel laravel-passport

我正在使用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;

但是,由于此呼叫是由作业发出的,因此我无法访问会话用户,因此这意味着无法生成任何承载令牌,并且得到未认证的消息。无论如何,还是有解决我完成内部请求时绕过中间件的方法?谢谢。

1 个答案:

答案 0 :(得分:0)