Aug 01

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;
Tagged mit:
Jul 30

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.

Tagged mit:
Apr 23

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');
Tagged mit:
Apr 05

Sobald ein Nutzer eingeloggt ist (und voraussgesetzt man hat die Nutzerverwaltung mit der Auth-Komponente implementiert) kann man auf die Daten ganz bequem in jedem Controller (in der die Auth-Komponente geladen wird) zugreifen:

$this->Auth->user('tabellenfeld');
Tagged mit:
Feb 21

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');
Tagged mit:
preload preload preload