Einen Benutzer manuell in Silverstripe einloggen

Eintrag von Sascha Köhler am 14.09.2010; 0 Kommentare.

Inhaltsverzeichnis

Normaler Loginvorgang

Der "normale" Loginvorgang in Silverstripe erfolgt über das Loginformular, welches über "/Security/login" erreichbar ist. Dieses wird auch dann angezeigt, wenn man sich in den Adminbereich von Silverstripe einloggen möchte.

Benutzer manuell einloggen

Was ist zu tun, wenn die Anmeldedaten des Benutzers bekannt sind, die Anmeldung selbst aber nicht über ein Formular erfolgen soll, sondern an einer beliebigen Stelle irgendwo in einer Methode des Controllers oder Models?

Voraussetzungen

Nehmen wir folgendes an:

  • in der Datei "/mysite/code/Page.php" existiert in der Klasse "Page_Controller" eine Methode "doLogin"; diese nimmt die Parameter "$emailAddress" und "$password" entgegen und versucht, den entsprechenden Benutzer am System anzumelden.
  • Die Methode "doLogin" kann aus einer anderen Methode aufgerufen werden, die das Ziel eines Formulars ist, das die benötigten Felder für die Email Adresse und das Passwort bereitstellt (wie es auch das original Loginformular von Silverstripe macht)

Die Loginfunktion

public function doLogin($emailAddress, $password, $remember = false) {

$member = false;

if (!empty($emailAddress) &&
!empty($password)) {

$emailAddress = Convert::raw2sql($emailAddress);
$password = Convert::raw2sql($password);

$member = MemberAuthenticator::authenticate(array(
           'Email'    => $emailAddress,
          'Password' => $password
        ));

if ($member) {
$member->logIn($remember);
}
}

return $member;
}

Sichern der Anmeldedaten

if (!empty($emailAddress) &&
!empty($password)) {

$emailAddress = Convert::raw2sql($emailAddress);
$password = Convert::raw2sql($password);
}

Hier tun wir genau das, was verantwortungsbewusste Programmierer immer tun sollten, wir sichern die per Request erhaltenen Daten so ab, dass wir sie in einer Datenbankabfrage gefahrlos einsetzen können.

Prüfen der Anmeldedaten

$member = MemberAuthenticator::authenticate(array(
'Email'    => $emailAddress,
'Password' => $password
));

Dieser Block ist das Kernstück der Loginlogik. Die statische Methode "authenticate" aus der Klasse "MemberAuthenticator" nimmt eine Email Adresse und ein Passwort im Klartext entgegen. Sie versucht anhand dieser Daten für den angegebenen Benutzer zu prüfen, ob das Passwort richtig ist; intern verwendet sie dazu den Validator der Klasse "Member".

Wenn die Prüfung erfolgreich ist, erhalten wir das passende Memberobjekt zurück, ansonsten den booleschen Wert "false".

Durchführen der Anmeldung

if ($member) {
$member->logIn($remember);
}

Wenn die Authentifizierung erfolgreich war, müssen wir den Benutzer nur noch einloggen. Das funktioniert über die Methode "logIn" des Memberobjekts. Wenn die Variable "$remember" auf boolean "true" steht, wird der Benutzer das nächste Mal automatisch eingeloggt.

Das wars auch schon, Silverstripe machts einfach :)

 

 


Geben Sie einen Kommentar ab

Kommentare

Bisher hat niemand diese Seite kommentiert.

RSS Feed für die Kommentare auf dieser Seite | RSS feed für alle Kommentare