Перенаправление Cakephp в методе isAuthorized не работает

Итак, после входа в метод isAuthorized я пытаюсь перенаправить пользователя на основе условия. Но проблема в том, что это не перенаправление. Ниже код, который я пробовал.

protected function isAuthorized($LoginUser)
{   

        if ($this->getTable('Users')->hasCompany($LoginUser) == false){
            $this->redirect(['controller'=>'Companies','action'=>'edit']);
            dd("hello");
        }
}

Это не перенаправление и получение приветственного сообщения. Как я могу перенаправить после входа пользователя на другую страницу в зависимости от условия?

🤔 А знаете ли вы, что...
CakePHP активно развивается и обновляется, чтобы соответствовать современным требованиям разработчиков.


77
1

Ответ:

Решено

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

Что вы можете сделать, это, например, динамически установить параметр unauthorizedRedirect компонента (и, возможно, также authError) из обработчика авторизации контроллера для этого конкретного случая (я думаю, вам также придется исключить действие соответствующего контроллера компании из этой проверки, иначе вы окажетесь в бесконечном цикле перенаправления):

if (!$this->getTable('Users')->hasCompany($LoginUser)) {
    $message = __('You must provide company information in order to proceed.');
    
    $url = \Cake\Routing\Router::url([
        'controller' => 'Companies',
        'action' => 'add'
    ]);
    
    $this->Auth->setConfig([
        'authError' => $message,
        'unauthorizedRedirect' => $url,
    ]);
    
    return false;
}

// ...

return true;

Если вы окажетесь в ситуации, когда такой возможности нет, грубая форсировка перенаправления с помощью броска \Cake\Http\Exception\RedirectException также может быть решением, хотя в идеале этого следует избегать, это лучше, чем умирать, так как он, по крайней мере, выдаст чистый ответ перенаправления:

$url = \Cake\Routing\Router::url([
    'controller' => 'Companies',
    'action' => 'add'
]);
throw new \Cake\Http\Exception\RedirectException($url);

Смотрите также