In diesem Blogartikel wird beschrieben, wie Ihr eine simple Nutzer Authentifizierung
für CakePHP mittels des offiziell unterstützen
Authentication Plugins aufbaut.
Authentifizierung in Web Anwendungen ist der Nachweis der Identität eines Nutzers, d.h.
ist der Nutzer der, der er vorgibt zu sein. Authentifizierung findet meist über
Nutzername/Passwort, Sessions/Cookies oder JWT/OAuth statt.
Ob ein bestimmter Nutzer auf eine bestimmte Resource (z.B. Website) zugreifen darf
ist hingegen Teil der Authorisierung und wird in einem weiteren Artikel beschrieben.
Installiert das Plugin mit Composer im root Verzeichnis eurer App:
Das Plugin in eure Application laden:
Middleware
Das Authentication Plugin wird mittels einer PSR-7 Middleware integriert; diese prüft bei jedem Request die Identität des Nutzers mittels eines Authentifikators (z.B. Form Authenticator mit Nutzername/Passwort).
Um die Middleware nutzen zu können muss unsere Application das AuthenticationProviderInterface implementieren und die Middleware in der middleware()
Methode hinzugefügt werden:
Als nächstes implementieren wir die getAuthenticationService() Methode:
AuthenticationService erstellen
Hierbei wird der AuthenticationService erstellt und konfiguriert. Die Option unauthenticatedRedirect gibt an, wohin nicht authentifizierte Nutzer weitergeleitet werden sollen. Weitere Konfigurationsmöglichkeiten unter Configuration.
Authenticator hinzufügen
Als nächstes fügen wir mit loadAuthenticator() Authenticator hinzu. In diesem Beispiel wird formularbasierte
Authentifizierung (Form) und PHP Session genutzt. Session sollte immer zuerst geladen werden. Die Formularfelder werden in der Option fields konfiguriert.
Identifier hinzufügen
Abschließdend wird mit loadIdentifier() noch der Identifier geladen. Falls euer Datenmodel anders aussehen sollte, kann mit der Option resolver hier ein anderes gesetzt werden. Die Option passwordHasher kann genutzt werden, um ältere Password Hashes durch neue zu ersetzen. Mehr dazu unter https://book.cakephp.org/authentication/2/en/identifiers.html#password
Controller Component hinzufügen
In unserem AppController laden wir noch die Authentication Component:
User Login Action implementieren
Damit sich der Nutzer auch anmelden kann muss der Zugriff auf die login() Action möglich sein. Dazu wird in der beforeFilter() des UsersControllerder Zugriff mit allowUnauthenticated erlaubt.
Die Login Action nutzt die AuthenticationComponent und erhält das Ergebnis des Anmeldeversuchs. Falls der Anmeldeversuch erfolgreich war, könnt ihr den Nutzer auf eine bestimmte Seite weiterleiten.
Als nächstes brauchen wir ein Anmeldeformular für unsere login() Action. Dazu nutzen wir den FormHelper:
User Registration Action implementieren
Aktuell gibt es allerdings keinen Nutzer in unserer Datenbank mit einem entsprechenden
Passwort Hash. Dazu ändern wir die setter Methode für unser Passwort in der User Entity so ab, dass sie das Passwort als Hash speichert:
Um neue Nutzer zu registrieren erstellen wir als nächstes eine register() Action. In dieser wird eine neue Entity erstellt und das dabei eingegeben Passwort wird als Hash in der Datenbank gespeichert.
Für das entsprechende Formular kann einfach der Inhalt der templates/Users/login.php in das Template der register Action nach templates/Users/register.php kopiert werden.
Über die URL entsprechende URL (in meinem Fall http://localhost/users/register)
kann nun ein neuer Nutzer angelegt werden. Unter http://localhost/users/ solltet ihr diesen Nutzer mit dem gehashten Passwort sehen.
Wir freuen uns über Interessierte