Бесконечный цикл входа в систему после обновления CakePHP 3.6

В моем приложении, основанном на CakePHP, я использую. Когда я вхожу с помощью URL /manager/login (соответствует LoginController, префикс Manager), все в порядке.

Когда я выхожу из системы или использую / manager, результат будет следующим:

/manager/login?redirect=%2Fmanager%2Flogin%3Fredirect%3D%252Fmanager%252Flogin%253Fredirect%253D%25252Fmanager%25252Flogin%25253Fredirect%25253D%2525252Fmanager%2525252Flogin%2525253Fredirect%2525253D%252525252Fmanager%252525252Flogin%252525253Fredirect%252525253D%25252525252Fmanager%25252525252Flogin%25252525253Fredirect%25252525253D%2525252525252Fmanager%2525252525252Flogin%2525252525253Fredirect%2525252525253D%252525252525252Fmanager%252525252525252Flogin%252525252525253Fredirect%252525252525253D%25252525252525252Fmanager%25252525252525252Flogin%25252525252525253Fredirect%25252525252525253D%2525252525252525252Fmanager%2525252525252525252Flogin%2525252525252525253Fredirect%2525252525252525253D%252525252525252525252Fmanager%252525252525252525252Flogin%252525252525252525253Fredirect%252525252525252525253D%25252525252525252525252Fmanager%25252525252525252525252Flogin%25252525252525252525253Fredirect%25252525252525252525253D%2525252525252525252525252Fmanager%2525252525252525252525252Flogin%2525252525252525252525253Fredirect%2525252525252525252525253D%252525252525252525252525252Fmanager%252525252525252525252525252Flogin%252525252525252525252525253Fredirect%252525252525252525252525253D%25252525252525252525252525252Fmanager%25252525252525252525252525252Flogin%25252525252525252525252525253Fredirect%25252525252525252525252525253D%2525252525252525252525252525252Fmanager%2525252525252525252525252525252Flogin%2525252525252525252525252525253Fredirect%2525252525252525252525252525253D%252525252525252525252525252525252Fmanager%252525252525252525252525252525252Flogin%252525252525252525252525252525253Fredirect%252525252525252525252525252525253D%25252525252525252525252525252525252Fmanager%25252525252525252525252525252525252Flogin%25252525252525252525252525252525253Fredirect%25252525252525252525252525252525253D%2525252525252525252525252525252525252Fmanager%2525252525252525252525252525252525252Flogin%2525252525252525252525252525252525253Fredirect%2525252525252525252525252525252525253D%252525252525252525252525252525252525252Fmanager%252525252525252525252525252525252525252Fprofile

Бесконечный цикл в строке запроса и сервер возвращают ошибку 404.15.

Та же конфигурация, что и в 3.5

$this->loadComponent('Auth', [
            'fields' => [
                'username' => 'email',
                'password' => 'password'
            ],
            'loginAction' => [
                'prefix' => 'manager',
                'controller' => 'Login',
                'action' => 'index',
                'plugin' => false
            ],
            'loginRedirect' => [
                'prefix' => 'manager',
                'controller' => 'Managers',
                'action' => 'index',
                'plugin' => false
            ],
            'logoutRedirect' => [
                'prefix' => 'manager',
                'controller' => 'Login',
                'action' => 'index',
                'plugin' => false
            ],
            'authenticate' => [
                'Form' => [
                    'passwordHasher' => [
                        'className' => 'DressFinder'
                    ],
                    'fields' => [
                        'username' => 'email',
                        'password' => 'password'
                    ],
                    'userModel' => 'Managers'
                ]
            ],
            'authError' => __('You are not authorized to access that location.'),
            'storage' => [
                'className' => 'Session',
                'key' => 'Auth.Managers'
            ]
        ]);

Маршруты не были изменены, и в контроллере без префиксов работают действия входа / выхода.

Спасибо за любую помощь.

3 ответа

Решение

Это ошибка, компонент аутентификации сравнивает действие входа в систему с текущим URL-адресом, включая аргумент строки запроса, что приводит к несоответствию, рассматривая пользователя как не прошедшего проверку подлинности, и, таким образом, вызывает перенаправление на действие входа в систему, после чего та же процедура запускается снова.

Это будет исправлено в 3.6.1, если вы не можете ждать, примените патч вручную до появления новой версии.

Увидеть

Это может быть не ответ, у меня недостаточно репутации для добавления комментариев! Вы можете попробовать добавить эти коды в routes.php

use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
use Cake\Routing\Route\DashedRoute;


Router::defaultRouteClass(DashedRoute::class);

Router::scope('/', function (RouteBuilder $routes) {

Router::prefix('manager', function ($routes){
    $routes->connect('/', ['controller'=>'Your_controller', 'action'=>'your_action']);
    $routes->connect('/:controller/', [], ['routeClass' => 'Cake\Routing\Route\InflectedRoute']);
    $routes->connect('/:controller/:action/*', [], ['routeClass' => 'Cake\Routing\Route\InflectedRoute']);
});
$routes->fallbacks(DashedRoute::class);
});

Plugin::routes();

Похоже, перенаправление не работает по умолчанию. Добавить / настроить следующие initialize метод в AppController должно работать нормально.

$this->loadComponent('RequestHandler', [ 'enableBeforeRedirect' => false ]);

Другие вопросы по тегам