【问题标题】:ERROR Class app\Auth not found - slim framework v3 middlewareERROR Class app\Auth not found - slim framework v3 中间件
【发布时间】:2017-04-24 05:51:56
【问题描述】:

我正在使用 slim 框架并尝试将slim token authentication 实现为中间件,现在每当我去

本地主机/项目/限制

我收到消息“找不到令牌”,但当我尝试按照中间件 documentation 在授权参数中传递令牌时,它似乎工作正常。

localhost/project/restrict?authorization=usertokensecret

我总是得到错误 Class 'app\Auth' not found 并且在我的错误跟踪中如下,

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

1【内部函数】:Slim\Middleware\TokenAuthentication->__invoke(Object(Slim\Http\Request), 对象(Slim\Http\Response),对象(Slim\App))

2 /Applications/AMPPS/www/project/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(对象(Slim\Middleware\TokenAuthentication), 数组)

3【内部函数】:Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), 对象(Slim\Http\Response),对象(Slim\App))

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

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

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

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

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

9 {主要}

这里是我正在使用的代码

<?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();

?>

【问题讨论】:

  • \app\Auth 存在吗?我们可以看看那个类和composer.json
  • @meun5 我通过composer安装了库,我想把它移到slim文件夹中吗?
  • 您是创建了\app\Auth 还是您使用composer 安装的库?
  • @meun5 用 composer 安装了库,没有创建任何类,我想创建它吗?如果您查看库中的示例文件夹,则有一个 app/Auth 类,但对于该示例,我认为它没有在任何地方使用或调用,我想将此 app 文件夹移动到不同的路径吗?
  • 我可以给您一张目录结构的图片,以便更好地了解所有内容的布局吗?

标签: php authentication slim


【解决方案1】:

\app\Auth 找不到的原因是因为它在当前 composer 自动加载路径中不存在。

首先将app移动到根文件夹,core和根vendor文件夹所在的位置。

然后添加

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

到根 composer.json。

最后,在根文件夹中运行composer dump-autoload -o

之后,\app\Auth 应该在自动加载路径中,并且一切都应该按预期工作。

【讨论】:

  • 谢谢,我已经想到我需要将它添加到 composer.json 并将应用程序文件夹移动到根目录,但是我一直收到同样的错误,直到你告诉我我需要运行命令作曲家转储自动加载-o
猜你喜欢
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2019-03-13
相关资源
最近更新 更多