jdoe1991
jdoe1991

Reputation: 17

ERROR Class app\Auth not found - slim framework v3 middleware

I am using slim framework and trying to implement slim token authentication as middleware, now whenever i go to

localhost/project/restrict

i get the message "Token Not Found" which seems to be working fine however when i try to pass the token in the authorization parameter as per the middleware documentation

locahost/project/restrict?authorization=usertokensecret

i always get the error Class 'app\Auth' not found and in my error trace the below,

0 /Applications/AMPPS/www/project/vendor/dyorg/slim-token-authentication/src/TokenAuthentication.php(66): {closure}(Object(Slim\Http\Request), Object(Slim\Middleware\TokenAuthentication))

1 [internal function]: Slim\Middleware\TokenAuthentication->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))

2 /Applications/AMPPS/www/project/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Slim\Middleware\TokenAuthentication), Array)

3 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))

4 /Applications/AMPPS/www/project/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(73): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))

5 /Applications/AMPPS/www/project/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))

6 /Applications/AMPPS/www/project/vendor/slim/slim/Slim/App.php(370): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))

7 /Applications/AMPPS/www/project/vendor/slim/slim/Slim/App.php(295): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))

8 /Applications/AMPPS/www/project/index.php(81): Slim\App->run()

9 {main}

here the code i am using

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require_once './vendor/autoload.php';

$app = new \Slim\App;
use Slim\App;
use Slim\Middleware\TokenAuthentication;

$config = [
    'settings' => [
        'displayErrorDetails' => true
    ]
];

$app = new App($config);

$authenticator = function($request, TokenAuthentication $tokenAuth){

    $token = $tokenAuth->findToken($request);
    $auth = new \app\Auth();
    $auth->getUserByToken($token);

};

/**
 * Add token authentication middleware
 */
$app->add(new TokenAuthentication([
    'path' =>   '/restrict',
    'authenticator' => $authenticator
]));

/**
 * Public route example
 */
$app->get('/', function($request, $response){
    $output = ['msg' => 'It is a public area'];
    $response->withJson($output, 200, JSON_PRETTY_PRINT);
});


/**
 * Restrict route example
 * Our token is "usertokensecret"
 */
$app->get('/restrict', function($request, $response){
    $output = ['msg' => 'It\'s a restrict area. Token authentication works!'];
    $response->withJson($output, 200, JSON_PRETTY_PRINT);
});


$app->run();

?>

Upvotes: 1

Views: 1427

Answers (1)

meun5
meun5

Reputation: 322

The reason that \app\Auth cannot be found is because it doesn't exist in the current composer autoload path.

First move the app to the root folder, where core and the root vendor folders are.

Then add

"autoload": {
    "classmap": [
      "app"
    ]
}

to the root composer.json.

Last, run composer dump-autoload -o in the root folder.

After that, \app\Auth should be in the autoload path and everything should work as expected.

Upvotes: 1

Related Questions