2.10. OAuth 2.0 认证

优质
小牛编辑
130浏览
2023-12-01

请查看 Authentication 章节,了解怎么配置 OAuth 2.0 provider。

定义路由 Scopes

通过使用 scopes,你可以对你的受保护的 API 拥有更多的控制。scopes 可以被设置在一个分组或一个路由上,使用数组或者管道分隔的字符串。

路由分组 Scopes

$api->version('v1', ['middleware' => 'api.auth', 'scopes' => ['read_user_data', 'write_user_data']], function ($api) {
    // 只有具有 “read_user_data” 权限的令牌才可以访问。
});

指定路由 Scopes

$api->version('v1', ['middleware' => 'api.auth'], function ($api) {
    $api->get('user', ['scopes' => 'read_user_data', function () {
        // 只有具有 “read_user_data” 权限的令牌才可以访问。
    }]);
});

控制器 Scopes

如果你的控制器使用 Dingo\Api\Routing\Helpers trait,那么你可以使用 scopes 方法。

use Dingo\Api\Routing\Helpers;

class UserController extends Controller
{
    use Helpers;

    public function __construct()
    {
        $this->scopes('read_user_data');
    }
}

你可以通过第二个参数作为一个管道分隔的字符串或者数组来定义你想要应用 scopes 的方法。如果你不提供这个方法,scopes 将会应用于所有方法。你也可以使用 exceptonly 数组关键字来应用 scopes 到方法的子集。

use Dingo\Api\Routing\Helpers;

class UserController extends Controller
{
    use Helpers;

    public function __construct()
    {
        // 仅仅应用于 index 方法。
        $this->scopes('read_user_data', 'index');

        // 应用于 store 方法之外的所有方法。
        $this->scopes('read_user_data', ['except' => 'store']);

        // 仅仅应用于 store 方法
        $this->scopes('write_user_data', ['only' => ['store']]);
    }

    public function index()
    {
        //
    }

    public function store()
    {
        //
    }
}