/ / 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 адрес в сесията. Предполагам, че имате някакъв plug-in за предварително изпращане на достъпа. Направи го там. След това, в манипулатора на формулярите за вход, проверете целевия 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.