Перенаправление аутентификации CakePHP 4 после успешного входа в систему

Я реализую аутентификацию в новом приложении CakePHP 4 (согласно руководству по CMS)

Мне пришлось изменить метод getAuthenticationService в Application.php следующим образом:

'unauthenticatedRedirect' => \Cake\Routing\Router::url('/users/login'),

а также

'loginUrl' => \Cake\Routing\Router::url('/users/login'),

следующие предложения, которые я видел в здесь.

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

Однако после входа в систему меня перенаправляют НЕ обратно на страницу перехода, а скорее на URL-адрес, который включает имя моего базового приложения дважды: http://localhost/my_app_name/my_app_name/my_controller

Поэтому я не уверен, где установить (или, скорее, переустановить) базовый URL-адрес для правильного перенаправления после успешного входа в систему.


person dividedbyzero    schedule 05.06.2020    source источник


Ответы (3)


Следовали ли вы примеру из документации ? Избегайте использования пользовательских реализаций, если CakePHP уже решил эту проблему за вас. Вы поблагодарите себя позже.

Это должно работать так, как должно, так как оно было протестировано в другом проекте. В этом примере UsersController имеет страницу входа.

В src\Controller\UsersController.php

public function login()
{
    if ($this->request->is('post')) {
        $user = $this->Auth->identify();
        if ($user) {
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl());
        } else {
            $this->Flash->error(__('Username or password is incorrect'));
        }
    }
}

Кроме того, помните, что ваш AppController также нуждается в правильной настройке функции инициализации:

В src\Controller\AppController.php

    /**
     * Initialization hook method.
     *
     * @return void
     */
    public function initialize(): void {
      $this->loadComponent('Auth', [
        // The login page (as referred to above)
        'loginAction' => [
          'controller' => 'User',
          'action' => 'login'
        ],
        // If no url is provided
        'loginRedirect' => [
          'controller' => 'SomeController',
          'action' => 'SomeAction'
        ],
         // If unauthorized, return them to page they were just on
        'unauthorizedRedirect' => $this->referer()
      ]);
    }

Изменить: также кажется, что CakePHP изменили свои документы аутентификации (поскольку, по-видимому, AuthComponent устарел и будет заменен плагинами авторизации и аутентификации).

в вашем Application.php

// In src/Application.php add the following imports
use Authentication\AuthenticationService;
use Authentication\AuthenticationServiceInterface;
use Authentication\AuthenticationServiceProviderInterface;
use Authentication\Middleware\AuthenticationMiddleware;
use Psr\Http\Message\ServerRequestInterface;
person Coreus    schedule 17.06.2020

Я смог обойти проблемы.

Это обсуждалось как проблема здесь, поэтому я следил за этим.

В моем методе входа UsersController.php после

   $redirect = $this->request->getQuery('redirect', [
                'controller' => 'Pages',
                'action' => 'home',
            ]);

Я добавил это:

if(!is_array($redirect)){
        if (strncmp($redirect, '/myapp', 6) === 0) {
            $redirect = substr($redirect, 6);
        }
}

И тогда двойной myapp удаляется.

Теперь переадресация входа работает как положено.

person dividedbyzero    schedule 06.06.2020

Я следовал руководству, только я изменил route.php, чтобы маршрут / шел к контроллеру Users и действию входа в систему.

$builder->connect('/', ['controller' => 'Users', 'action' => 'login']);
person AlbertoT    schedule 25.02.2021