2017-05-08 3 views
7

서버에 POST 요청을 보낼 때마다 TokenMismatchException 오류가 발생합니다. 나는 이미 내가 서버에 대한 정보의 특정 부분을 보낼 ajaxHeader을 사용했다CSRF 토큰 불일치 | Laravel 5.4

<input type="hidden" name="_token" value= "{{csrf_token()}}"> 

이전 전송 시도했지만 그 또한 같은 오류를 던지고있다.

나는 더 많은 디버깅을 수행하고 VerifyCsrfToken 파일에서 찾아 냈습니다.

protected function tokensMatch($request) 
    { 
     $token = $this->getTokenFromRequest($request); 
     return is_string($request->session()->token()) && 
       is_string($token) && 
       hash_equals($request->session()->token(), $token); 
    } 

array:3 [ 
"sessionToken" => "rgicYLOUhb2kLLChpVByNLQO1KVMb0Gkjzb7ZtTN" //$request->session()->token() 
"requestToken" => "IgXWquvnfujZJ1Vs9vbSgpjgX3rAnd5PpeklRvBD" // $request->input('_token') ?: $request->header('X-CSRF-TOKEN') 
"laravel_token" => "rgicYLOUhb2kLLChpVByNLQO1KVMb0Gkjzb7ZtTN" //csrf_token() 
] 

미들웨어 토큰 매치 기능에서 위의 배열이 나타납니다. 아무도 내게이 특별한 문제의 이유와 해결책을 말해 줄 수 있습니까? 다음은 upvote에 버튼을 클릭 불려 내가

function likeReview(id) 
    { 
     var like_span = $('#like_'+id); 
     var like_div = $('#likeDiv_'+id); 
     var like_span_text = $('#likeText_'+id); 
     $.ajax({ 
      type: 'post', 
      url: '{{route('like.review')}}', 
      data: {review_id: id}, 
      beforeSend: function() { 
      }, 
      success: function (data) { 
       if(data.status == 'success') 
       { 
        var like = like_span.html(); 
        var sum = 0; 
        if(data.like == 1){ 
         sum = parseInt(like)+1; 
         like_div.addClass('upvoted-active'); 
         like_span_text.html('UPVOTED'); 
        } else { 
         sum = parseInt(like)-1; 
         like_div.removeClass('upvoted-active'); 
         like_span_text.html('UPVOTE'); 
        } 
        like_span.html(sum); 
       } 
      }, 
      error: function (xhr, textStatus, thrownError) { 
       alert('Something went wrong. Please try again!'); 
      } 
     }); 
    } 

기능을 사용하고있는 아약스이다

<div class="js-btn-thank-area upvoted-active js-activity-root" id="likeDiv_{{$review->id}}"> 
    <a href="javascript:;" onclick="likeReview({{$review->id}})" class="thank-btn"> 
    <i class="fa fa-arrow-up fa-fw"></i> 
    <span class="feed-action-text" id="likeText_{{$review->id}}">UPVOTED</span> 
    </a> 
    <div class="stats-thanks" id="like_{{$review->id}}">                  
    {{$review->likes()->where('like','=',1)->count()}} 
    </div> 
</div> 
+0

코드를 게시하십시오. 어떻게 데이터를 보냅니 까? –

+1

문제가있는 곳의 양식 제출 및 아약스 코드를 게시 하시겠습니까? –

+2

https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token을 보신 적이 있습니까? –

답변

2

그냥 작동하지 않습니다 AJAX와 함께 게시 필드로 CSRF를 사용하여;

$.ajaxSetup({ headers: { 'csrftoken' : '{{ csrf_token() }}' } }); 

아약스 전화를 걸기 전에 :)!

EDIT : 또한 아약스 요청의 데이터 부분에 넣을 수도 있습니다.

data: { 
    review_id: id, 
    "_token": "{{ csrf_token() }}" 
} 

편집 : storage에서 임시 데이터를 삭제 명확히하려면 채팅이 문제를 해결했다.

+0

이미 두 가지 방법으로 모두 시도해 보았지만 여전히 작동하지 않습니다. – Shwetank

+0

html 폼에서 csrf 토큰을 제거 했습니까? –

+0

내가 더 구체적으로 할 수는 없습니까? – Shwetank