Итак, после входа в метод isAuthorized я пытаюсь перенаправить пользователя на основе условия. Но проблема в том, что это не перенаправление. Ниже код, который я пробовал.
protected function isAuthorized($LoginUser)
{
if ($this->getTable('Users')->hasCompany($LoginUser) == false){
$this->redirect(['controller'=>'Companies','action'=>'edit']);
dd("hello");
}
}
Это не перенаправление и получение приветственного сообщения. Как я могу перенаправить после входа пользователя на другую страницу в зависимости от условия?
🤔 А знаете ли вы, что...
CakePHP активно развивается и обновляется, чтобы соответствовать современным требованиям разработчиков.
Как упоминалось в комментариях, объекты авторизации компонента аутентификации должны возвращать логическое значение, и в зависимости от этого пусть компонент выполняет несанкционированную обработку -
Что вы можете сделать, это, например, динамически установить параметр 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);
Смотрите также