/ / Zend Framework: Ako presmerovať na pôvodnú adresu URL po prihlásení? - zend-frame, redirect, login

Zend Framework: Ako presmerovať na pôvodnú adresu URL po prihlásení? - zend-frame, redirect, login

Snažím sa implementovať prihlasovací systém, ktorý bude dostatočne inteligentný, aby presmeroval používateľa späť na stránku, na ktorej sa nachádzali, skôr ako sa rozhodli (alebo boli nútení) prejsť na prihlasovaciu stránku.

Viem, že to vyzerá ako podobná otázka toto, a toto, ale netýkajú sa obidvoch mojich scenárov.

Existujú dva scenáre:

  1. Používateľ sa konkrétne rozhodol prejsť na prihlasovaciu stránku:

    <a href="<?php echo $this->url(array(
    "controller"=>"auth",
    "action"=>"login"), "default", true); ?>">Log In</a>
    
  2. Používateľ je presmerovaný, pretože sa pokúšal získať prístup k chránenému obsahu:

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

Ako môžem implementovať riešenie bez zobrazenia adresy URL presmerovania na paneli s adresou?

odpovede:

3 pre odpoveď č. 1

Uložte cieľovú adresu URL do relácie. Myslím, že máte nejaký prístupový doplnok pred odoslaním. Urob to tam. A potom v príkazovom riadku prihlasovacieho formulára overte cieľovú adresu URL v relácii a presmerujte na ňu po úspešnej autentifikácii.

Vzorový kód z môjho projektu:

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

...

}

Tu, current_roles() vždy obsahuje "hosť", ktorý je neovereným používateľom, pre ktorý Zend_Auth::hasIdentity() je false.