Cada vez que intento asignar una ruta desde mi archivo api.php , aparece un error 401: Unauthenticated .
Esta es la ruta:
Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function () { Route::post('admin/product-image-sort', 'ApiController@SaveProductImageSort')->name('api.save-product-image-sort'); });Estoy llamando a esto usando 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> Así que esto funciona perfectamente cuando se excluye la parte 'middleware' => 'auth:api' pero no quiero permitir el acceso a mi api interna sin ningún tipo de autenticación.
Lo que hace la API es enviar una serie de ID que obtuvo mediante una serialización de Sortable de jQuery Ui. El ApiController luego busca a través de eso y actualizó la clasificación de cada imagen de un producto específico.
Incluí el token CSRF como se indica en Laravel Docs al colocar csrf_token() en una metaetiqueta y adjuntarlo a cada solicitud de Ajax:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });Como también puedo ver en la pestaña de red de Chrome es que agrega dos cookies a la solicitud.
El punto es que no estás autenticado. El token CSRF no es un token de autenticación.
Necesitará una forma de autenticar a sus usuarios contra la API y (por ejemplo) darles un token de autenticación único, que envían con cada solicitud, para asegurarse de que puedan usar su API.
Tal vez este enlace puede ser útil:
https://laracasts.com/discuss/channels/laravel/53-api-routes-auth-middleware-confusion
Esta parte de los documentos también puede ser útil. Se trata de la autenticación básica HTTP:
https://laravel.com/docs/5.4/authentication#http-basic-authentication
Especialmente la parte "Autenticación básica HTTP sin estado"
Echemos un vistazo al método de construcción HomeController. ¿Hay una llamada que se parece a esto?
$this->middleware(['auth']);Tengo dos soluciones:
Cree un controlador sin usar el middleware de autenticación: $this->middleware(['auth']);
Crear la ruta antes de Route::group(['middleware' => 'auth'] en el archivo routes/web.php .