5.2 Authentifizierung
Der Originaltext dieses Abschnitts hat sich seit der letzen Übersetzung geändert. Bitte hilf dabei die Unterschiede zu lösen. Du kannst:
Systeme zur Authentifikation für Benutzer sind ein üblicher Bestandteil vieler Web Applikationen. In CakePHP gibt es verschiedene Systeme, um Benutzer zu authentifizieren. Dabei bietet jedes unterschiedliche Optionen an. Im Kern prüft die Authentifikations-Komponente, ob ein Benutzer ein Benutzerkonto für diese Seite hat. Wenn ja, bekommt dieser Nutzer uneingeschränkten Zugang zur kompletten Seite.
Diese Komponente kann mit der ACL Komponente (Zugangskontrolllisten) kombiniert werden, um komplexere Zugangskontrollen innerhalb der Seite zu schaffen. Die ACL Komponente kann beispielsweise einem Nutzer nur Zugang zu öffentlichen Bereichen einer Seite gewähren, während ein andere Nutzer auf geschützte Administrationsbereiche dieser Seite Zugriff erlangt.
CakePHPs Auth Komponente kann dazu benutzt werden ein solches System schnell und einfach erstellen. Werfen wir doch mal einen Blick darauf, wie ein sehr einfaches System zur Authentifizierung gebaut werden kann:
Wie alle anderen Komponenten benutzt man es, indem man 'Auth' zur Liste der benutzten Komponenten im Controller hinzufügt.:
class FooController extends AppController {
var $components = array('Auth');
class FooController extends AppController {var $components = array('Auth');
Oder, man fügt es zum AppController hinzu, damit alle Controller sie benutzen:
class AppController extends Controller {
var $components = array('Auth');
class AppController extends Controller {var $components = array('Auth');
So weit so gut. Es gibt ein paar Konventionen, die man berücksichtigen sollte, wenn man die Auth Komponente benutzt. Standardmäßig erwartet die Auth Komponente die Verwendung einer Datenbanktabelle namens 'users' mit den Feldern 'username' und 'password'. In einigen Fällen läßt die Datenbank die Benennung 'password' als Spaltenname nicht zu. Weiter unten zeigen wir dir, wie du die standardmäßig verwendeten Feldernamen änderst, damit es trotzdem auf deinem System funktioniert.
Erstellen wir zunächst unser Benutzertablle mit folgender SQL-Anweisung::
CREATE TABLE users (
id integer auto_increment,
username char(50),
password char(40),
PRIMARY KEY (id)
);
CREATE TABLE users (id integer auto_increment,username char(50),password char(40),PRIMARY KEY (id));
Was man bedenken sollte, wenn man die Datenbanktabelle erstellt, um die Benutzerdaten für die Authentifizierung zu speichern: Die Auth Komponente erwartet, dass das Passwort gehashed in der Datenbank gespeichert wird, anstatt als Klartext hinterlegt zu werden. Stelle sicher, dass das Feld, indem du das Benutzerpasswort speichern willst, groß genug für den Hash ist (z.B. 40 Stellen für SHA1).
Willst Du einen Benutzer manuell anlegen, ist der einfachste Weg, die richtig gehashten Daten zu bekommen, zu versuchen, sich mit diesen einzuloggen und dann den SQL Log auszuwerten.
Für den einfachsten Aufbau musst du nur zwei Aktionen in deinem Controller erstellen:
class UsersController extends AppController {
var $name = 'Users';
var $components = array('Auth'); // Nicht notwendig, wenn bereits in deinem app controller deklariert
/**
* Die Auth Komponente bietet die benötigte Funktionalität
* für Login, du kannst die Funktion also leer lassen.
*/
function login() {
}
function logout() {
$this->redirect($this->Auth->logout());
}
}
class UsersController extends AppController {var $name = 'Users';var $components = array('Auth'); // Nicht notwendig, wenn bereits in deinem app controller deklariert/*** Die Auth Komponente bietet die benötigte Funktionalität* für Login, du kannst die Funktion also leer lassen.*/function login() {}function logout() {$this->redirect($this->Auth->logout());}}
Während du die login() Funktion leer lassen kannst, musst aber das Template des login View anlegen (unter app/views/users/login.ctp). Dies ist das einzige View Template des UsersController, das du erstellen musst. Das nachfolgende Beispiel geht davon aus, dass du bereits den Form Helper benutzt:
<?php
$session->flash('auth');
echo $form->create('User', array('action' => 'login'));
echo $form->input('username');
echo $form->input('password');
echo $form->end('Login');
?>
<?php$session->flash('auth');echo $form->create('User', array('action' => 'login'));echo $form->input('username');echo $form->input('password');echo $form->end('Login');?>
Dieser View erstellt ein einfaches Login-Formular, in das Benutzername und Passwort eingegeben werden können. Nach dem Abschicken des Formulars übernimmt die Auth Komponente den Rest. Die Session Flash Mitteilung zeigt jeden Hinweis an, der von der Auth Komponente generiert wird.
Unglaublich aber wahr: Wir sind fertig! So wird unglaublich einfach ein datenbankgestütztes Authentifikationssystem mit Hilfe der Auth Komponente implementiert. Wie auch immer, wir können natürlich noch viel mehr machen. Sehen wir uns mal eine erweiterte Nutzung der Komponte an.


























