Ich schreibe den authentication
Prozess für meine Anwendung neu unter ZF2
.Zend Framework 2 - Überprüfen auf Authentifizierung in abstrakten Controller -> onDispatch?
Ich muss mehr Optionen haben, um den Benutzer abhängig vom aufgerufenen Dienst zu authentifizieren.
I.E. Für Webanwendungen, auf die ich vom Browser aus zugreife, werde ich mich über Ldap authentifizieren und für API-Dienste werde ich die Benutzeranmeldeinformationen in der Kopfzeile überprüfen.
Ich erstellte eine abstract controller
Überprüfung, ob der Benutzer authentifiziert ist; Wenn nicht, wird es zur Anmeldeseite umgeleitet.
Alle Controller in den Modulen, die denselben Authentifizierungsprozess benötigen, erweitern diese Klasse.
Ich muss die ursprüngliche Anfrage speichern, um es nach erfolgreicher Anmeldung zurück zu es umleiten.
Meine Fragen sind:
1. die abstrakte Controller Ist -> onDispatch() Methode die richtige Ort, es zu platzieren?
Jede Lösung fand ich immer in der Module.php
. Um die Authentifizierungsmethode zu unterscheiden, müssen sie überprüfen, ob der angeforderte Controller übereinstimmt, da Module.php immer aufgerufen wird. Ist es nicht "sauberer", es im Controller zu setzen?
2. Sollte ich Redirect oder Forward verwenden, um vom ursprünglichen Controller zum Login Controller und dann zurück zu gelangen?
Ich habe nichts dagegen, dass die URL in der Browserleiste ändert, nur auf der Suche nach der besten und schnellsten Lösung, die auch ursprüngliche Anfrage hält.
3. Ist es richtig, die uri in der Sitzungsklasse zu speichern (aus dem Auth-Modul)? Gibt es eine Möglichkeit, die gesamte Anfrage zu speichern (einschließlich vielleicht der POST-Daten, falls erforderlich)?
Hier ist die Zusammenfassung Controller:
abstract class AbstractAuthActionController extends AbstractActionController {
public function onDispatch(MvcEvent $e) {
$serviceManager = $e->getApplication()->getServiceManager();
$auth = $serviceManager->get ('LdapAuth\Client\Ldap');
if (! $auth->hasIdentity()) {
$uri = $e->getRequest()->getRequestUri();
$callBackFunction = $this->getLdap()->getCallBackFunction(); // = new SessionData();
$callBackFunction::setOriginalUri($uri); // function to store temporarly the uri
return $this->redirect()->toRoute ('ldap-login-route');
} else {
return parent::onDispatch ($e);
}
}
}