如何将swagger的安全注释添加到fos rest控制器?

时间:2018-06-26 18:40:33

标签: symfony annotations swagger fosrestbundle nelmioapidocbundle

美好的一天

我有一个FOSRestBundleNelmioApiDocBundle的Symfony API项目。 我不知道如何使用FOS Rest添加安全注释。 我正在使用OAuth v2,因此我的安全性基于以下几点:

apiKey:accessToken,refreshToken

这是我在 app / config 中的nelmio api软件包配置:

nelmio_api_doc:
    areas:
        path_patterns: # an array of regexps
            - ^/api/v1(?!/doc$)
    documentation:
        info:
            title: Ads api documentation
            description: Swagger api documentation
            version: 1.0.0
        securityDefinitions:
            api_key:
                type: apiKey
                description: "Your Json Web Token, dont forget to preprend 'Bearer'"
                name: Authorization
                in: header
        security:
            api_key: []

还有一个我的控制器中的路由示例:

/**
 * @Rest\View(statusCode=200, serializerGroups={"rentAdList", "time"})
 * @Rest\Get("", name="api_v1_user_ad_list")
 *
 * @SWG\Tag(name="user_ad")
 * @SWG\Response(
 *     response=200,
 *     description="Display ad",
 *     @SWG\Schema(
 *      @Model(type=AdBundle\Entity\RentAd::class, groups={"rentAdList", "time"})
 *     )
 * )
 *
 * @return RentAd[]
 */
public function listAction()
{
    $user           = $this->get('security.token_storage')->getToken()->getUser();
    $rentAdDataProvider = $this->get('ad.data_provider.rent_ad_data_provider');
    $rentAds        = $rentAdDataProvider->getRentAdsByUser($user);

    return $rentAds;
}

所以我的问题是如何使用api_key角色为 USER_ROLE

的Swagger安全注释

我尝试添加:

/**
 * @Rest\View(statusCode=200, serializerGroups={"rentAdList", "time"})
 * @Rest\Get("", name="api_v1_user_ad_list")
 *
 * @SWG\Tag(name="user_ad")
 * @SWG\Response(
 *     response=200,
 *     description="Display ad",
 *     @SWG\Schema(
 *      @Model(type=AdBundle\Entity\RentAd::class, groups={"rentAdList", "time"})
 *     )
 * )
 * @SWG\SecurityScheme(name="apiKey")
 *
 * @return RentAd[]
 */

在这种情况下,我有一个例外:

  

不允许将注释“ Swagger \ Annotations \ SecurityScheme”用作“ ApiBundle \ Controller \ Api \ V1 \ UserRentAdController :: listAction()”中的根注释。

请帮助我。

1 个答案:

答案 0 :(得分:-1)

有一会儿,我找到了唯一适合我的解决方案。
我在Controller中添加了两个注释

* @SWG\Parameter(name="Authorization", in="header", required=true, type="string", default="Bearer accessToken", description="Authorization")
* @Security(name="Bearer")`

在这种情况下,在api编码中,您将使用Authorisation : Bearer {accessToken}

作为附加参数