web-dev-qa-db-fra.com

Laravel 5.4 + Ajax est égal à 401 non authentifié

Chaque fois que j'essaie d'assigner une route à partir de mon fichier api.php, je reçois un 401: Unauthenticated- Erreur.

C'est la route:

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

J'appelle cela en utilisant 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>

Donc, cela fonctionne parfaitement lorsque l'on exclut la partie 'middleware' => 'auth:api', mais je ne souhaite pas simplement autoriser l'accès à mon API interne sans aucune forme d'authentification.

Ce que fait l'API, c'est envoyer un tableau d'identifiants obtenus à l'aide d'une sérialisation de Sortable de jQuery Ui. ApiController a ensuite traversé cette étape et a mis à jour le tri de chaque image d’un produit spécifique.

J'ai inclus le jeton CSRF comme indiqué dans la documentation Laravel en mettant csrf_token() dans une méta-balise et en l'attachant à chaque requête Ajax:

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

Comme je peux également le voir dans l'onglet Réseau de Chrome, il ajoute deux cookies à la demande.

 enter image description here

6
PoTTii

Le fait est que vous n'êtes pas authentifié. Le jeton CSRF n'est pas un jeton d'authentification. 

Vous aurez besoin d'un moyen d'authentifier vos utilisateurs auprès de l'API et (par exemple) de leur donner un jeton d'authentification unique, qu'ils envoient à chaque demande, afin de s'assurer qu'ils sont autorisés à utiliser votre API.

Peut-être que ce lien peut être utile:

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

Cette partie de la documentation peut aussi être utile. Il s’agit de l’authentification HTTP de base:

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

En particulier la partie "Authentification HTTP de base sans état"

2
ExCluSiv3

Jetons un coup d'oeil à la méthode de construction HomeController. Y a-t-il un appel qui ressemble à quelque chose comme ça?

$this->middleware(['auth']);
1