2017-03-20 34 views
5

Bất cứ khi nào tôi cố gắng chỉ định tuyến đường từ api.php Tệp của tôi, tôi nhận được 401: Unauthenticated -Lỗi.Laravel 5.4 + Ajax bằng 401 Không được xác thực

Đây là tuyến đường:

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

Im gọi này sử dụng 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> 

Vì vậy, điều này làm việc hoàn hảo khi trừ phần 'middleware' => 'auth:api' nhưng tôi không muốn chỉ cho phép truy cập của tôi api nội bộ mà không có bất kỳ hình thức xác thực nào.

Điều api làm là gửi một mảng các id mà nó nhận được bằng cách sử dụng tuần tự hóa Sắp xếp của jQuery Ui. Các ApiController sau đó foreachers thông qua đó và cập nhật các phân loại của mỗi hình ảnh của một sản phẩm cụ thể.

Tôi đã bao gồm CSRF Mã thích ghi trong Laravel Documents bằng cách đặt csrf_token() thành một meta-tag và gắn nó vào mọi yêu cầu Ajax:

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

Như tôi cũng có thể nhìn thấy trong tab mạng của Chrome là rằng nó thêm hai cookie vào yêu cầu.

enter image description here

+0

hi bạn đã tìm thấy một giải pháp chưa? – utdev

+0

@utdev Đáng buồn là không. Bạn đã làm trong thời gian chờ đợi? Cảm ơn trước. – PoTTii

+0

Hoặc cung cấp chi tiết xác thực (mã thông báo) hoặc xóa phần mềm trung gian? –

Trả lời

1

Vấn đề là bạn không được xác thực. Mã thông báo CSRF không phải là mã thông báo xác thực.

Bạn sẽ cần một cách xác thực người dùng của mình dựa trên api và (ví dụ) cung cấp cho họ mã thông báo xác thực duy nhất mà họ gửi cùng với từng yêu cầu để đảm bảo họ được phép sử dụng API của bạn.

Có lẽ liên kết này có thể hữu ích:

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

này là một phần của tài liệu có thể hữu ích quá. Đó là về xác thực HTTP cơ bản:

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

Đặc biệt là phần "Stateless HTTP Basic Authentication"

Các vấn đề liên quan