Отсутствует URL перенаправления плагина аутентификации CakePHP 4 RequestAuthorizationMiddleware

Я пытаюсь добавить RequestAuthorizationMiddleware для некоторого контроллера в свое приложение в пироге 4. В ПО промежуточного слоя авторизации я вижу такой блок кода:

$middlewareQueue->add(new AuthorizationMiddleware($this, [
    'unauthorizedHandler' => [
        'className' => 'Authorization.Redirect',
        'url' => '/users/login',
        'queryParam' => 'redirectUrl',
        'exceptions' => [
            MissingIdentityException::class,
            OtherException::class,
        ],
    ],
]));

Я могу добавить URL-адрес перенаправления, если авторизация не удалась. Это работает нормально, но как я могу добавить URL-адрес перенаправления для запроса ПО промежуточного слоя авторизации ?


person wiifree    schedule 29.01.2020    source источник


Ответы (1)


На самом деле вы не получаете перенаправления при сбое авторизации, но когда авторизация не может быть выполнена с самого начала, то есть когда нет аутентифицированного удостоверения, которое можно было бы использовать для авторизации, это вызовет следующее исключение:

\Authorization\Exception\MissingIdentityException

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

\Authorization\Exception\ForbiddenException

Это исключение создается промежуточным программным обеспечением авторизации запроса, а также < strong>компонентом авторизации (если только вы не выполняете can* проверки вручную).

Просто добавьте его в конфигурацию exceptions, и все готово (при условии, что у вас все в порядке с перенаправлениями, происходящими для всех неудачных попыток авторизации, которые не обрабатываются ручными can* проверками):

'exceptions' => [
    \Authorization\Exception\MissingIdentityException::class,
    \Authorization\Exception\ForbiddenException::class,
    // ...
],

Обратите внимание: чтобы все это работало должным образом, необходимо добавить промежуточное ПО авторизации запроса после промежуточного ПО авторизации по умолчанию!

person ndm    schedule 30.01.2020