2017-03-20 4 views
5

Immer wenn ich versuche, eine Route von meiner api.php Datei zuzuordnen bekomme ich einen 401: Unauthenticated -Error.Laravel 5.4 + Ajax entspricht 401 Nicht authentifiziert

Dies ist die Route:

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

Im Aufruf dieses mit 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> 

das funktioniert so makellos, wenn der 'middleware' => 'auth:api' Teil ohne aber ich will nicht nur erlauben, meinen Zugriff interne API ohne jegliche Form der Authentifizierung.

Was die API tut, ist ein Array von IDs senden, die es mit einer Serialisierung von jQuery Ui's Sortierbar bekommen. Der ApiController forscht dann durch und aktualisiert die Sortierung jedes Bildes eines bestimmten Produktes.

ich die CSRF-Token enthalten haben mag in der Laravel Docs angegeben durch csrf_token() in einen Meta-Tag setzen und es zu jeder Ajax-Anfrage Befestigung:

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

Wie ich auch in Chrome Registerkarte Netzwerk sehen kann, ist dass es der Anfrage zwei Cookies hinzufügt.

enter image description here

+0

hallo hast du noch eine Lösung gefunden? – utdev

+0

@utdev Leider nicht. Hast du in der Zwischenzeit? Danke im Voraus. – PoTTii

+0

Entweder Authentifizierungsdetails bereitstellen (Token) oder die Middleware entfernen? –

Antwort

1

Der Punkt ist, dass Sie nicht authentifiziert sind. Das CSRF-Token ist kein Authentifizierungstoken.

Sie benötigen eine Möglichkeit, Ihre Benutzer gegen die API zu authentifizieren und ihnen beispielsweise ein eindeutiges Authentifizierungs-Token zu geben, das sie bei jeder Anfrage senden, um sicherzustellen, dass sie Ihre API verwenden dürfen.

Vielleicht kann dieser Link hilfreich sein:

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

Dieser Teil der docs auch vielleicht hilfreich. Es geht um HTTP-Basic-Authentifizierung:

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

der Teil "Stateless HTTP Basic Authentication" Gerade