/ / Zend Framework: Wie wird nach der Anmeldung auf die ursprüngliche URL umgeleitet? - Zend-Framework, Redirect, Login

Zend Framework: Wie wird nach der Anmeldung auf die ursprüngliche URL umgeleitet? - Zend-Framework, Redirect, Login

Ich versuche, ein Login-System zu implementieren, das schlau genug ist, um einen Benutzer zurück zu der Seite zu leiten, auf der sie sich befanden, bevor sie sich entschieden (oder gezwungen wurden), auf die Login-Seite zu gehen.

Ich weiß, das scheint eine ähnliche Frage zu sein dieses, und dieses, aber sie betreffen nicht meine beiden Szenarien.

Es gibt zwei Szenarien hier:

  1. Der Benutzer entscheidet sich speziell zur Anmeldeseite zu gehen:

    <a href="<?php echo $this->url(array(
    "controller"=>"auth",
    "action"=>"login"), "default", true); ?>">Log In</a>
    
  2. Benutzer wird umgeleitet, weil er versucht hat, auf geschützten Inhalt zuzugreifen:

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

Wie kann ich dafür eine Lösung implementieren, ohne die URL "redirect to" in der Adressleiste anzuzeigen?

Antworten:

3 für die Antwort № 1

Speichern Sie die Ziel-URL in der Sitzung. Ich nehme an, Sie haben eine Art Vorab-Plug-in für den Zugriff. Mach es dort. Und dann, in der Login-Formular-Handler, nach der Ziel-URL in der Sitzung suchen, und um es nach einer erfolgreichen Authentifizierung umleiten.

Beispielcode aus meinem Projekt:

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

...

}

Hier, current_roles() enthält immer "guest", für den der nicht authentifizierte Benutzer ist Zend_Auth::hasIdentity() ist false.