2017-09-04 4 views
0

고객은 웹 인터페이스 및 REST API를 통해 정확히 동일한 엔드 포인트를 사용할 수 있도록 요청했습니다.Yii2 웹 및 나머지 API를 통해 엔드 포인트에 액세스 가능

로그인 할 때만 웹 브라우저를 사용하여 동일한 엔드 포인트를 볼 수 있어야합니다. REST API를 통해 액세스 할 때 유효한 액세스 토큰을 제출해야합니다.

  • 브라우저 : 아무 문제
  • 이죠 내가이 엔드 포인트에 액세스하려고 할 때

    이제
    [ 
        'class' => 'yii\rest\UrlRule', 
        'controller' => 'site', 
        'pluralize' => false, 
        'extraPatterns' => [ 
         'POST upload-raw-data' => 'uploadRawData' 
        ], 
    ] 
    

    는, 나는이 결과를 가지고 다음과 같이

    이 특정 엔드 포인트에 대한 규칙을 정의/POST : 404 오류

  • 우편 배달/GET : 아무 문제
  • 활성화하기와 같은 시도 eStrictParsing을 사용 설정하면 404 오류가 발생합니다.

    코드의 다른 부분을 제공해야한다면 기꺼이 제공 할 것입니다.

    +0

    당신이 토큰을 사용하는 경우 지정하십시오. https://github.com/yiisoft/yii2/issues/8153 –

    +0

    예, 토큰을 사용하고 있습니다. 아직 유효성을 검사하지는 않았지만 브라우저 또는 나머지를 사용할 때 약간의 출력을 얻는 기본 사항을 얻으려고했습니다. – kurt

    답변

    0

    내 문제의 해결책을 찾은 것 같습니다. 문제는 CSRF 검증이었던 것 같습니다.

    beforeAction()에서이 특정 동작에 대해 비활성화하면 POST 호출이 의도 한대로 동작합니다.

    public function beforeAction($action) { 
        if ($action->id == 'upload-raw-data') 
         Yii::$app->controller->enableCsrfValidation = false; 
    
        return parent::beforeAction($action); 
    } 
    

    소스 : https://gist.github.com/guerreiro/9e9cb3154b9047f5d2a0