/ / Zend Framework: Як переадресувати на початковий URL після входу? - zend-Framework, переадресація, вхід

Zend Framework: як перенаправити на оригінальний URL після входу? - zend-framework, перенаправлення, логін

Я намагаюся реалізувати систему входу, яка буде досить розумною, щоб перенаправити користувача назад на сторінку, на якій вони були, перш ніж вони вирішили (або змушені були) перейти на сторінку входу.

Я знаю, це схоже на подібне питання цей, і цей, але вони не стосуються обох моїх сценаріїв.

Тут є два сценарії:

  1. Користувач спеціально вирішує перейти на сторінку входу:

    <a href="<?php echo $this->url(array(
    "controller"=>"auth",
    "action"=>"login"), "default", true); ?>">Log In</a>
    
  2. Користувача переспрямовано, оскільки він намагався отримати доступ до захищеного вмісту:

    if (!Zend_Auth::getInstance()->hasIdentity()) {
    $this->_helper->redirector("login", "auth");
    }
    

Як я можу реалізувати рішення для цього, не відображаючи URL-адреса "переспрямування" в адресний рядок?

Відповіді:

3 для відповіді № 1

Збережіть цільову URL-адресу в сеансі. Я думаю, у вас є якийсь плагін для попереднього відправлення доступу. Зробіть це там. А потім у обробнику форми для входу перевіряйте цільову URL-адресу в сеансі та переспрямовуйте на неї після успішної аутентифікації.

Приклад коду з мого проекту:

class Your_Application_Plugin_Access extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request) {
foreach (self::current_roles() as $role) {
if (
Zend_Registry::get("bootstrap")->siteacl->is_allowed(
$role,
new Site_Action_UriPath($request->getPathInfo())
)
) return; // Allowed
}

$this->not_allowed($request);
}

private function not_allowed(Zend_Controller_Request_Abstract $request) {
$destination_url = $request->getPathInfo();

// If the user is authenticted, but the page is denied for his role, show 403
// else,
// save $destination_url to session
// redirect to login page, with $destination_url saved:
$request
->setPathInfo("/login")
->setModuleName("default")
->setControllerName("login")
->setActionName("index")
->setDispatched(false);
}

...

}

Тут current_roles() завжди містить "гість", який є неавторизованим користувачем, для якого Zend_Auth::hasIdentity() є false.