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.
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?
Nehmen wir folgendes an:
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;
}
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.
$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".
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 :)
Bisher hat niemand diese Seite kommentiert.
RSS Feed für die Kommentare auf dieser Seite | RSS feed für alle Kommentare