cloudcreativity / laravel-json-api

JSON API (jsonapi.org) package for Laravel applications.
http://laravel-json-api.readthedocs.io/en/latest/
Apache License 2.0
778 stars 109 forks source link

Error Adding Laravel Sanctum Middleware #600

Closed pro-cms closed 3 years ago

pro-cms commented 3 years ago

Hi, want to make my stories route protected only for authenticated users, for that I used laravel sanctum wherein the request i attach bear token as for authorization but when I send the request I got an error response. When i remove header Application/json it returns empty array ,

{
    "data": []
} 

when I add it got this error


{
    "message": "The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request.",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
    "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/cloudcreativity/laravel-json-api/src/Http/ContentNegotiator.php",
    "line": 213,
    "trace": [
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/cloudcreativity/laravel-json-api/src/Http/ContentNegotiator.php",
            "line": 183,
            "function": "notAcceptable",
            "class": "CloudCreativity\\LaravelJsonApi\\Http\\ContentNegotiator",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/cloudcreativity/laravel-json-api/src/Http/ContentNegotiator.php",
            "line": 129,
            "function": "checkAcceptTypes",
            "class": "CloudCreativity\\LaravelJsonApi\\Http\\ContentNegotiator",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/cloudcreativity/laravel-json-api/src/Http/Middleware/NegotiateContent.php",
            "line": 125,
            "function": "encodingForMany",
            "class": "CloudCreativity\\LaravelJsonApi\\Http\\ContentNegotiator",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/cloudcreativity/laravel-json-api/src/Http/Middleware/NegotiateContent.php",
            "line": 92,
            "function": "matchEncoding",
            "class": "CloudCreativity\\LaravelJsonApi\\Http\\Middleware\\NegotiateContent",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "CloudCreativity\\LaravelJsonApi\\Http\\Middleware\\NegotiateContent",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/cloudcreativity/laravel-json-api/src/Http/Middleware/BootJsonApi.php",
            "line": 82,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "CloudCreativity\\LaravelJsonApi\\Http\\Middleware\\BootJsonApi",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
            "line": 50,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 103,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 55,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 44,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
            "line": 33,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 128,
            "function": "Laravel\\Sanctum\\Http\\Middleware\\{closure}",
            "class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/sanctum/src/Http/Middleware/EnsureFrontendRequestsAreStateful.php",
            "line": 34,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Laravel\\Sanctum\\Http\\Middleware\\EnsureFrontendRequestsAreStateful",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 695,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 670,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 636,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 625,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 166,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 128,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
            "line": 86,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/fruitcake/laravel-cors/src/HandleCors.php",
            "line": 57,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Fruitcake\\Cors\\HandleCors",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/fideloper/proxy/src/TrustProxies.php",
            "line": 57,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 167,
            "function": "handle",
            "class": "Fideloper\\Proxy\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 103,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 141,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/core/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 110,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/home/u417428104/domains/simulizi.co.tz/public_html/index.php",
            "line": 52,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        }
    ]
}

Here is my route

JsonApi::register('v1')->middleware('auth:sanctum')->routes(function ($api, $router){
// JsonApi::register('v1', function (Api $api) {
    $api->resource('stories')->relationships(function ($relations) {
        $relations->hasMany('episodes');
        $relations->hasOne('Category');
    });
        $api->resource('posts');
                $api->resource('sliders');

    $api->resource('categories')->relationships(function ($relations) {
        $relations->hasMany('Stories');

    });

});

Here is my request Dart


var headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer 162|DOhxAdaJ0Vf9LmTdAf4bKDyoh688IDmAb7VjcVP5'
};
var request = http.Request('GET', Uri.parse('https://simulizi.co.tz/api/v1/stories'));

request.headers.addAll(headers);

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
}
else {
  print(response.reasonPhrase);
}

Any idea how to resolve this issue

lindyhopchris commented 3 years ago

You need to use the JSON:API media type in your Accept header: application/vnd.api+json.

application/json isn't valid for a JSON:API request.

pro-cms commented 3 years ago

when I useapplication/vnd.api+json the request doesn't work, it returns an empty array

lindyhopchris commented 3 years ago

Empty array means there's no matching data.