Try this command ‘php artisan cache:clear’
Dec 30, 2019
15
Level 9
routing in laravel 6 - MethodNotAllowedHttpException
Laravel 6
app/Http/Middleware/Authenticate.php
public function handle($request, Closure $next, ...$guards)
{
if(in_array('auth:api',$request->route()->action['middleware'])){
$request->headers->set('authorization',['Bearer '.$request->post('accessToken')]);
}
$this->authenticate($request, $guards);
return $next($request);
}
app/Exceptions/Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
{
if(in_array('auth:api',$request->route()->action['middleware']))
{
return response()->json(['message' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('login'));
}
routes/api.php
Route::post('login', 'ApiLoginController@login')->name('login');
Route::middleware('auth:api')->group(function () {
Route::post('/testMethod', 'ApiController@testMethod');
});
app/Http/Controllers/ApiController.php
public function testMethod(Request $request)
{
dd('test');
}
. . . . .
Why should I have a GET request?
Route::get('/testMethod', 'ApiController@testMethod');
it all works for me.
However, when it changes to POST
Route::post('/testMethod', 'ApiController@testMethod');
This is my mistake in Postman:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: The POST method is not supported for this route. Supported methods: GET, HEAD. in file /var/www/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php on line 256
#0 /var/www/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php(242): Illuminate\Routing\RouteCollection->methodNotAllowed(Array, 'POST')
#1 /var/www/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php(176): Illuminate\Routing\RouteCollection->getRouteForMethods(Object(Illuminate\Http\Request), Array)
#2 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(635): Illuminate\Routing\RouteCollection->match(Object(Illuminate\Http\Request))
#3 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(624): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#4 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(613): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#5 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(177): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#6 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#7 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#8 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#9 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#10 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#11 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#15 /var/www/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#16 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(152): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#19 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(117): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#20 /var/www/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#21 {main}
Level 9
The problem was that the file was app/Http/Middleware/Authenticate.php
$request->headers->set('authorization',['Bearer '.$request->post('accessToken')]);
and it should be
$request->headers->set('authorization',['Bearer '.$request->input('accessToken')]);
the app/Http/Middleware/Authenticate.php file should look like this:
public function handle($request, Closure $next, ...$guards)
{
if(in_array('auth:api', $request->route()->action['middleware'])) {
$request->headers->set('authorization',['Bearer '.$request->input('accessToken')]);
}
$this->authenticate($request, $guards);
return $next($request);
}
Thank you all for your help.
Please or to participate in this conversation.