Перенаправление входа в CakePHP 3.4

Я пытаюсь перенаправить на текущую страницу после входа в систему, используя cakephp 3.4, но у меня получается вот так

Страница localhost не работает, страница locahost перенаправляет вас слишком много раз. Попробуйте очистить куки

в течение 2 секунд после этого он перенаправляет на домашнюю страницу. Пожалуйста, помогите мне здесь. Вот мой код

В appController.php

public function initialize()
{ 
    parent::initialize();
    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'authorize' => ['Controller'],
        'authenticate' => [
            'Form' => [
                'fields' => [
                    'username' => 'email',
                    'password' => 'password'
                ],
                'scope' => ['userStatus' => '1']
            ]
        ],
        'loginAction' => [
            'controller' => 'Users',
            'action' => 'login'
        ],
        'unauthorizedRedirect' => $this->referer(),
        'logoutRedirect'       => [
                'controller' => 'Users',
                'action'     => 'login'
        ]
    ]);
}

В логинконтроллер.php

function login{ 
 if ( $this->request->is( 'post' ) ) {
    if ( $this->Auth->login() ) 
    {
       $this->redirect($this->referer());
    } 
    else {
      $this->Flash->error(__('Your username or password is incorrect.'));
    }
  }
}

person Ashok    schedule 30.05.2017    source источник
comment
Связанный вопрос: - stackoverflow.com/questions/49257722/ , вы можете найти ответ здесь   -  person bikash.bilz    schedule 15.03.2018


Ответы (2)


Похоже, у вас есть какая-то петля перенаправления. Вы должны использовать AuthComponent::redirectUrl().

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'));
        }
    }
}

См. Перенаправление пользователей после входа в документации.

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

Если параметр не передан, возвращаемый URL будет использовать следующие правила:

  • Возвращает нормализованный URL-адрес из значения строки запроса перенаправления, если он присутствует и для того же домена, в котором запущено текущее приложение. До версии 3.4.0 использовалось значение сеанса Auth.redirect.
  • Если нет значения строки запроса/сеанса и есть конфигурация loginRedirect, возвращается значение loginRedirect.
  • Если нет значения перенаправления и нет loginRedirect, возвращается /.
person Marijan    schedule 30.05.2017
comment
Большое спасибо. Теперь все работает нормально, но получает нулевую строку параметра запроса, даже если передается строка параметра запроса, подобная этой login?redirect=%2Farticles%2Fadd. У вас есть идеи, что где это было бы неправильно? - person Ashok; 30.05.2017

Используйте $this->Auth->redirectUrl() вместо $this->referer().

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

  • Возвращает нормализованный URL-адрес из значения строки запроса перенаправления, если он присутствует и для того же домена, в котором запущено текущее приложение. До версии 3.4.0 использовалось значение сеанса Auth.redirect.
  • Если значение строки/сеанса запроса отсутствует, а есть конфигурация loginRedirect, возвращается значение loginRedirect.
  • Если нет значения перенаправления и нет loginRedirect, возвращается /.

Добавьте к своим AuthComponent параметрам конфигурации:

Перенаправление входа

URL-адрес (определенный как строка или массив) действия контроллера, на который пользователи должны перенаправляться после входа в систему. Это значение будет игнорироваться, если пользователь имеет значение Auth.redirect в своем сеансе.

Ваш код должен быть таким:

В appController.php

public function initialize()
{ 
    parent::initialize();
    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'authorize' => ['Controller'],
        'authenticate' => [
            'Form' => [
                'fields' => [
                    'username' => 'email',
                    'password' => 'password'
                ],
                'scope' => ['userStatus' => '1']
            ]
        ],
        'loginAction' => [
            'controller' => 'Users',
            'action' => 'login'
        ],
        'unauthorizedRedirect' => $this->referer(),
        'logoutRedirect'       => [
                'controller' => 'Users',
                'action'     => 'login'
        ],
        'loginRedirect' => [
            'controller' => 'Pages',
            'action' => 'display'     
        ]
    ]);
}

В логинконтроллер.php

function login{ 
 if ( $this->request->is( 'post' ) ) {
    if ( $this->Auth->login() ) 
    {
       $this->redirect($this->Auth->redirectUrl());
    } 
    else {
      $this->Flash->error(__('Your username or password is incorrect.'));
    }
  }
}

См. также Перенаправление пользователей после входа

person Rayann Nayran    schedule 30.05.2017