在每个控制器请求之前执行功能

时间:2019-04-25 01:55:11

标签: laravel http-token-authentication laravel-controller

我正在通过php-openstack-sdk使用令牌认证来调用云API。

$openstack = new OpenStack\OpenStack([
    'authUrl' => '{authUrl}',
    'region' => '{region}',
    'user' => [
        'id' => '{userId}',
        'password' => '{password}'
    ],
    'scope' => ['project' => ['id' => '{projectId}']]
]);

但是,每个API调用都要求我经过身份验证(如上面的代码所示)。与其在每个控制器功能中重复相同的身份验证代码,不该如何执行一次并能够在控制器功能中调用$openstack?也就是说,在我的控制器中,我可以直接使用$ openstack。

public function listServers() 
{
    $openstack->computeV2()->listServers();
}

3 个答案:

答案 0 :(得分:1)

如果希望所有控制器均可访问,请在__construct()的{​​{1}}中编写逻辑。如果没有,请在您需要的控制器中写入Controller.php

Controller.php

__construct()

NetworkController.php

class Controller extends BaseController
{
    protected $openstack;

    public function __construct()
    {
        $this->openstack = new OpenStack\OpenStack([
            ...
        ]);
    }
}

答案 1 :(得分:0)

您可以放置​​控制器的__construct函数中显示的代码,并将其作为受保护的变量提供给该类。

答案 2 :(得分:0)

我认为最好的方法是使用laravel middlewares