CakePHP: lastlogin eines Nutzers speichern

Um den letzten erfolgreichen Login eines Nutzers in einem Feld ‘lastlogin‘ zu speichern, muss in der login()-Methode des UsersController folgender Code eingefügt werden:

if ($this->Auth->user()) { 
 $this->User->id = $this->Auth->user('id'); 
 $this->User->saveField('lastlogin', date("Y-m-d H:i:s")); 
 $this->redirect('/controller/action'); 
}

Damit das ganze auch aufgerufen wird, muss im app_controller noch das autoRedirect ausgestellt werden. Dies erklärt auch die redirect()-Methode in der oben dargestellten login()-Methode.

Im app_controller muss also noch folgendes stehen (oder im beforeFilter() des UsersController)

$this->Auth->autoRedirect = false;

CakePHP: Plugins mit AuthComponent schützen oder ‘Wie erstelle ich ein Plugin, welches ebenfalls den UsersController der Hauptanwendung nutzt?’

Normalerweise wird durch die ‘loginAction‘-Variable der AuthComponent die Action definiert, die bei dem Versuch eine geschützte Seite aufzurufen, angezeigt werden soll.

Wenn ein Plugin in eine CakePHP-Anwendung eingebunden und ebenfalls durch die AuthComponent geschützt werden soll, dann wird der Nutzer auf eine Seite in der Form ‘http://www.domain.de/plugin_name/users/login‘ weitergeleitet. Ist letztendlich auch logisch, denn CakePHP geht davon aus, dass der UsersController Teil des Plugins ist.

Um dies zu umgehen und den “richtigen” UsersController der Hauptanwendung aufzurufen, muss der ‘loginAction‘ der AuthComponent eine weitere Variable, nämlich ‘plugin‘, übergeben werden. D.h. normalerweise in der beforeFilter()-Methode des UsersController oder des AppController muss der Aufruf folgendermaßen lauten:

 $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'plugin' => null);

Anschließend nutzt CakePHP den UserController als globalen UserController.

PS: Eine ähnliche Problematik tritt bei

$html->link();

usw. auf. Auch hier muss der Parameter ‘plugin‘ übergeben werden.

CakePHP: $this->Auth->allow() für Statische Seiten

Statische Seiten in CakePHP werden über den Pages_Controller eingebunden. Möchte man diese frei zugänglich machen (d.h. auch erreichbar, obwohl die Auth-Komponente im Einsatz ist), dann muss der Auth-Variablen “allow” die “display”-Action des Pages_Controller übergeben werden.

$this->Auth->allow('display');

CakePHP: Überprüfung, ob ein User eingeloggt ist…

Um beispielsweise den “Login”-Link in einen “Logout”-Link wechseln zu lassen, sobald der Nutzer eingeloggt ist, braucht man von der Auth-Komponente irgendeine Rückmeldung über den Status. Eine Methode existiert dafür per se nicht. Die Methode

Auth->user()

ist jedoch eigentlich eine Wrapper-Methode für die Session

Auth.User

Daher kann man den Weg über die Session gehen und in Controllern mit der Session-Component und den Views (und damit auch im Layout – falls notwendig) mit dem Session-Helper arbeiten:

In Controllern sieht die Überprüfung daher folgendermaßen aus. Ist der Nutzer eingeloggt, liefert die Methode true

$this->Session->check('Auth.User.id');

In Views muss es so gehandhabt werden:

$session->check('Auth.User.id');