0

What I have tried:

Router::scope('/v1', function ($routes) {
    // ...
    $routes->resources('Auth', [
        'map' => [
            'login' => [
                'action' => 'login',
                'method' => 'POST',
                'path' => 'login'
            ]
        ],
        'only' => ['login']
    ]);
});

I have an Auth controller, due to the design, I cannot use UsersController to perform a login.

What I expect:

POST to /v1/auth/login should return a True or a False (mechanism already added in the action.

What I get:

Missing Route

RTFM performed:

https://book.cakephp.org/3.0/en/development/routing.html#prefix-routing https://book.cakephp.org/3.0/en/development/routing.html#changing-the-controller-actions-used https://book.cakephp.org/3.0/en/development/routing.html#creating-restful-routes

and

https://book.cakephp.org/3.0/en/development/routing.html#mapping-additional-resource-routes

$ tail debug.log
Cake\Error\ExceptionRenderer::render() - CORE/src/Error/ExceptionRenderer.php, line 200
Cake\Error\Middleware\ErrorHandlerMiddleware::handleException() - CORE/src/Error/Middleware/ErrorHandlerMiddleware.php, line 110
Cake\Error\Middleware\ErrorHandlerMiddleware::__invoke() - CORE/src/Error/Middleware/ErrorHandlerMiddleware.php, line 94
Cake\Http\Runner::__invoke() - CORE/src/Http/Runner.php, line 65
Cake\Http\Runner::run() - CORE/src/Http/Runner.php, line 51
Cake\Http\Server::run() - CORE/src/Http/Server.php, line 80
[main] - ROOT/webroot/index.php, line 37

Version : 3.4.13

error.log

2018-02-20 10:26:35 Warning: DebugKit not enabled. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
2018-02-20 10:26:35 Error: [Cake\Routing\Exception\MissingRouteException] A route matching "/login" could not be found.
Exception Attributes: array (
  'url' => '/login',
)
Request URL: /login
Stack Trace:
#0 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Router.php(368): Cake\Routing\RouteCollection->parseRequest(Object(Cake\Http\ServerRequest))
#1 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(48): Cake\Routing\Router::parseRequest(Object(Cake\Http\ServerRequest))
#2 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#3 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#4 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#5 /var/www/force_api/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(92): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#6 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#7 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#8 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Server.php(80): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#9 /var/www/force_api/webroot/index.php(37): Cake\Http\Server->run()
#10 {main}


2018-02-20 10:26:42 Warning: DebugKit not enabled. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
2018-02-20 10:26:42 Error: [Cake\Routing\Exception\MissingRouteException] A route matching "/v1/login" could not be found.
Exception Attributes: array (
  'url' => '/v1/login',
)
Request URL: /v1/login
Stack Trace:
#0 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Router.php(368): Cake\Routing\RouteCollection->parseRequest(Object(Cake\Http\ServerRequest))
#1 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(48): Cake\Routing\Router::parseRequest(Object(Cake\Http\ServerRequest))
#2 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#3 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#4 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#5 /var/www/force_api/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(92): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#6 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#7 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#8 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Server.php(80): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#9 /var/www/force_api/webroot/index.php(37): Cake\Http\Server->run()
#10 {main}


2018-02-20 10:26:53 Warning: DebugKit not enabled. You need to either install pdo_sqlite, or define the "debug_kit" connection name.
2018-02-20 10:26:53 Error: [Cake\Routing\Exception\MissingRouteException] A route matching "/v1/auth/login" could not be found.
Exception Attributes: array (
  'url' => '/v1/auth/login',
)
Request URL: /v1/auth/login
Stack Trace:
#0 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Router.php(368): Cake\Routing\RouteCollection->parseRequest(Object(Cake\Http\ServerRequest))
#1 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(48): Cake\Routing\Router::parseRequest(Object(Cake\Http\ServerRequest))
#2 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#3 /var/www/force_api/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#4 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#5 /var/www/force_api/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(92): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#6 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#7 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#8 /var/www/force_api/vendor/cakephp/cakephp/src/Http/Server.php(80): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#9 /var/www/force_api/webroot/index.php(37): Cake\Http\Server->run()
#10 {main}

Error I see:

cahephp error

** Also **

$ bin/cake routes | grep auth
 | auth:login            | /v1/auth/login | {"controller":"Auth","action":"login","_method":"POST","plugin":null}  |
Keval Domadia
  • 4,768
  • 1
  • 37
  • 64
  • Whenever receiving errors, please always post the complete error message, and include the related entry from the error/debug log, including the stacktrace! Also please always mention your _exact_ CakePHP version (last line in `vendor/cakephp/cakephp/VERSION.txt`) - thanks! – ndm Feb 19 '18 at 11:58
  • Thanks... Made the changes. – Keval Domadia Feb 20 '18 at 05:22
  • Please do not use `tail`, it has no clue where a log entry starts or ends, or whether those lines actually belong to the error in question (the snippet doesn't even include the message). That snippet most likely belongs to an unrelated _error_, as _exceptions_ (missing route errors are exceptions) usually aren't logged to `debug.log`, but to `error.log`. – ndm Feb 20 '18 at 07:42
  • Yep. Edited. I am wondering why does it show parameters like id, etc in the error? (Check image) – Keval Domadia Feb 20 '18 at 10:41
  • That's the default routing options applied by `RoutesBuilder::resources()`. I can't see anything wrong with the route, it works fine for me as is, and the error also doesn't give any further hints. I can only imagine that you're either not doing a `POST` request (make sure that there's no redirect), or that you're encountering a bug. – ndm Feb 20 '18 at 11:00
  • I have been playing around with Postman and curl and various headers. Turns out, the routes does not want to play the game with me... also, I have tried removing the POST bit from the routes... everything else works except /v1/auth/login – Keval Domadia Feb 20 '18 at 13:52

0 Answers0