Cakephp3 Tiny Auth允许身份验证失败

时间:2019-06-07 22:57:05

标签: authentication cakephp cakephp-3.x

我在我的Cakephp3中使用TinyAuth插件。我有一个具有以下名称空间的控制器:

namespace App\Controller\Api\Datatables;

控制器是列表,我的功能是过滤器

我具有以下路线设置:

Router::scope('/datatables', ['prefix' => 'api/datatables'], function (RouteBuilder $routes) {
    $routes->extensions(['json', 'xml', 'ajax']);   
    $routes->fallbacks(DashedRoute::class);
});

这使我可以调用以下网址:

/datatables/listings/filter.json

我想启用过滤功能:

datatables/Listings = filter

当我调用我的URL时,将重定向到登录名。如果我登录该网址有效,那么allow_auth即可。

我也尝试了以下方法:

api/datatables/Listings = filter
api/Datatables/Listings = filter
Api/Datatables/Listings = filter
api/datatables/Listings = filter
datatables/Listings = filter
Datatables/Listings = filter
api/Listings = filter

无论什么路径都不允许。如果我将控制器移动到默认位置,则在allow_auth中:

Listings = filter

过滤器功能未经授权即可使用。这表明使用路由器作用域时插件存在问题。

这是插件的composer.json

{
    "name": "ypnos-web/cakephp-datatables",
    "description": "jQuery DataTables for CakePHP 3",
    "homepage": "https://github.com/ypnos-web/cakephp-datatables",
    "type": "cakephp-plugin",
    "keywords": ["cakephp", "datatables"],
    "license": "MIT",
    "authors": [
        {
            "name": "Frank Heider",
            "homepage": "https://github.com/fheider",
            "role": "Author"
        },
        {
            "name": "Johannes Jordan",
            "homepage": "https://github.com/ypnos-web",
            "role": "Author"
        }
    ],
    "require": {
        "php": ">=7.0",
        "cakephp/cakephp": "^3.6"
    },
    "autoload": {
        "psr-4": {
            "DataTables\\": "src"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "DataTables\\Test\\": "tests",
            "Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
        }
    }
}

我正确地说,斜线确实对acl.ini有效-就我所知,它们似乎是正确的。

我正在使用斜线来更好地组织我的职能。

当我调用/datatables/listings/filter.json时,我的请求参数如下:

'controller' => 'Listings',
    'action' => 'filter',
    'pass' => [],
    'prefix' => 'api/datatables',
    'plugin' => null,
    '_ext' => 'json',
    '_matchedRoute' => '/datatables/:controller/:action/*',
    '?' => [
        'string' => 'seat'
    ]

如果我调用/api/datatables/listings/filter.json:

找不到控制器类数据表。

1 个答案:

答案 0 :(得分:0)

我对插件不太熟悉,但是api/datatables/Listings似乎是正确的格式,但是从插件的来源看,似乎不支持嵌套前缀:

if (strpos($key, '/') !== false) {
    list($res['prefix'], $key) = explode('/', $key);
}

https://github.com/dereuromark/cakephp-tinyauth/blob/1.11.0/src/Utility/Utility.php#L23-L25

该代码将解析api作为前缀,并解析datatables作为控制器。

您可能想打开一个问题,或者如果可以的话,自己添加对此的支持。