CakePHP войти перенаправить на запрошенный URL - PullRequest
3 голосов
/ 19 октября 2010

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

Мы используем последнюю стабильную версию Cake. Спасибо.

- Редактировать -

Это настроено так

$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
// $this->Auth->autoRedirect = false;
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard');

функция входа в users_controller

function login() {
    Debugger::log("Redirect Session Key:" . $this->Session->read('Auth.redirect'), $level = 7);
    $ref = $this->referer();
    Debugger::log("referer():" . $ref, $level = 7);
}

Когда я перехожу на неавторизованную страницу, например localhost / mysite / unauthorized, я перенаправляюсь на localhost / mysite / users / login. В моем файле debug.log ключ сеанса перенаправления распечатывается как users / dashboard, что подразумевает отсутствие действительного реферера. Чтобы проверить это предположение, я также распечатываю реферер в функции входа в систему, которая фактически возвращает «/», что является значением по умолчанию в случае отсутствия информации о реферере от запрашивающей стороны, которую я считаю.

1 Ответ

2 голосов
/ 20 октября 2010

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

Прочитайте раздел еще раз:

AuthComponent запоминает, к какой паре контроллер / действие вы пытались добраться до того, как вас попросили пройти аутентификацию, сохраняя это значение в сеансе под ключом Auth.redirect.Однако, если это значение сеанса не задано (например, если вы переходите на страницу входа по внешней ссылке ), то пользователь будет перенаправлен на URL-адрес, указанный в loginRedirect.

Он запомнит страницу, к которой вы пытались получить доступ, если только вы не зашли на страницу входа напрямую и, следовательно, предыдущей страницы вы не посетили.Если вы ссылаетесь на /foo/secret_page и перенаправлены на страницу входа в систему, в сеансе следует запомнить /foo/secret_page.

Если вы избавляетесь от $this->Auth->autoRedirect = false и позволяете AuthComponent делать свое дело, ондолжен работать так, как вы хотите.

В противном случае вы можете прочитать и установить ключ сеанса 'Auth.redirect' вручную, чтобы иметь больше контроля над перенаправлениями.

...