2017-04-21 2 views
0

내 laravel 5.3 애플리케이션에서 나는 모든 Ajax 요청에 대해 글로벌하게 CSRF 검사를 가능하게했다.CSRF 체크가없는 외부 API를위한 Ajax GET

$.ajaxSetup({ 
     headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') } 
    }); 

하지만 외부 API에 대한 ajax GET 요청은 다음과 같습니다.

$.ajax({ 
     url: "https://api.xxxxxxxxxxx/v1/" +code+ "?api_key="+API_KEY, 
     type: "GET", 
     dataType: "text", 
     success: function (data) { 
     }, 
     error: function (msg) { 
     } 
    }); 

여기에서 CSRF 확인을 피할 필요가 있습니다. 나는 두 가지 방법을 시도했지만 아무 것도 나를 위해 일하지 않습니다. VerifyCsrfToken.php
첫번째 방법

class VerifyCsrfToken extends BaseVerifier 
{ 
    protected $except = [ 
     'https://api.xxxxxxxxx/v1/*' 
    ]; 
} 

두번째 방법

class VerifyCsrfToken extends BaseVerifier 
{ 
     if (! $request->is('https://api.xxxxxxxxx/v1/*')) 
     { 
       return parent::handle($request, $next); 
     } 

      return $next($request); 

}

이 문제를 해결하는 방법을 알아 주시기 바랍니다합니다.

+0

경로 파일을 표시하십시오. 'api.php' 파일에'api' 경로를 추가 했습니까? –

+0

아니요, api.php에 대한 변경 작업을 수행하지 않았습니다. – Shashika

답변

0

이렇게 ajax 호출에서 ajaxSetup을 재정의 할 수 있습니다.

$.ajax({ 
    url: "https://api.xxxxxxxxxxx/v1/" +code+ "?api_key="+API_KEY, 
    type: "GET", 
    dataType: "text", 
    headers : {}, 
    success: function (data) { 
    }, 
    error: function (msg) { 
    } 
}); 

그러나 ajaxSetup은 사용하지 않아야합니다.

여기에 지정된 설정은 $ .ajax 또는 $ .get()과 같은 Ajax 기반 파생어에 대한 모든 호출에 영향을줍니다. 다른 호출자 (예 : 플러그인)가 정상 기본 설정을 기대할 수 있으므로 바람직하지 않은 동작이 발생할 수 있습니다. 그런 이유로이 API를 사용하지 않는 것이 좋습니다. 대신, 호출에서 옵션을 명시 적으로 설정하거나 그렇게하기위한 간단한 플러그인을 정의하십시오. : https://api.jquery.com/jquery.ajaxsetup/

+0

나를 위해 작동하지 않습니다. Laravel 설명서는 Ajax 설정의 사용법을 설명합니다. https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token – Shashika

0

$.ajax({ 
       type:'GET', 
       url:"https://api.xxxxxxxxxxx/v1/" +code+ "?api_key="+API_KEY, 
       data:{_token: "{{ csrf_token() }}", 
       }, 
       success: function(msg) { 

       } 
      }); 
+0

나는 지쳤으나 나를 위해 일하지 않았다. – Shashika

0

마지막으로, 나는 javascript 내에서 방법을 알아 냈어 도움이 될 것입니다. ajax 호출 전에 특정 헤더를 삭제 한 다음 헤더를 다시 할당 할 수 있습니다.

delete $.ajaxSettings.headers["X-CSRF-Token"]; 

    $.ajax({ 
      url: "https://api.xxxxxxxxxxx/v1/" +code+ "?api_key="+API_KEY, 
      type: "GET", 
      dataType: "text", 
      success: function (data) { 
      }, 
      error: function (msg) { 
      } 
     }); 

$.ajaxSettings.headers["X-CSRF-Token"] = $('meta[name=_token]').attr('content');