2017-03-20 53 views
5

Zawsze, gdy próbuję przypisać trasę z mojego pliku api.php, otrzymuję komunikat o błędzie 401: Unauthenticated.Laravel 5.4 + Ajax jest równy 401 Nieuwierzytelniony

Jest to trasa:

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function() { 
    Route::post('admin/product-image-sort', '[email protected]')->name('api.save-product-image-sort'); 
}); 

Im wywołanie to przy użyciu jQuery Ajax:

<script> 

     $('#sortable-image-container').sortable({ 
      items: '> .row > *', 
      update: function (event, ui) { 
       var data = $(this).sortable('serialize'); 
       console.log(data); 
       $.ajax({ 
        data: data, 
        type: 'POST', 
        url: "{{ route('api.save-product-image-sort') }}", 
        success: function (data) { 
         if(data == "success"){ 
          $.notify({ 
           icon: 'pe-7s-close-circle', 
           message: "Sucessfully saved the Image Sorting" 
          },{ 
           type: 'success', 
           timer: 500 
          }); 
         } 
        } 
       }); 
      } 
     }); 
    </script> 

Tak to działa bez zarzutu, gdy wyłączając 'middleware' => 'auth:api' część, ale nie chcę, aby umożliwić dostęp tylko mój wewnętrzny interfejs API bez jakiejkolwiek formy uwierzytelniania.

To, co robi api, to wysłanie tablicy identyfikatorów, które otrzymała przy użyciu serializacji sortable jQuery Ui. ApiController następnie wprowadza w tym celu i aktualizuje sortowanie każdego obrazu określonego produktu.

Podaję CSRF token lubię stwierdzono w laravel Docs poprzez umieszczenie csrf_token() do meta-tag i dołączenie go do każdego żądania Ajax:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

Jak mogę też zobaczyć w karcie sieciowej Chrome jest że dodaje dwa pliki cookie do żądania.

enter image description here

+0

hi nie znalazłeś jeszcze rozwiązanie? – utdev

+0

@utdev Niestety nie. Czy robiłeś to w międzyczasie? Z góry dziękuję. – PoTTii

+0

Podaj dane uwierzytelniające (token) lub usuń oprogramowanie pośrednie? –

Odpowiedz

1

Chodzi o to, że nie są uwierzytelnione. Token CSRF nie jest tokenem uwierzytelniania.

Potrzebny będzie sposób uwierzytelnienia użytkowników przed api i (na przykład) nadania im unikalnego tokena uwierzytelnienia, który wysyłają przy każdym żądaniu, aby mieć pewność, że mogą korzystać z interfejsu API.

Może ten link może być pomocne:

https://laracasts.com/discuss/channels/laravel/53-api-routes-auth-middleware-confusion

Ta część docs może też pomocny. Chodzi o podstawowe uwierzytelnianie HTTP:

https://laravel.com/docs/5.4/authentication#http-basic-authentication

Zwłaszcza część „bezpaństwowiec Podstawowe uwierzytelnianie HTTP”