Auth0 mit Laravel 5.4 inklusive Speichern der User

By | 9. August 2017

Urlaub, nachdem ich es geschafft habe mich vom Wacken 2017 zu erholen, wird die restliche Zeit mal wieder in etwas Spaß mit PHP  und Laravel gesteckt.

Für ein kleines Projekt wo zwingend eine Userverwaltung notwendig ist wurde mir kürzlich von einem Kollegen der Dienst auth0 empfohlen.

Was macht auth0? Es nimmt dir den ganzen Aufwand zum Einbinden verschiedener Authentication-Provider wie Facebook, Google, Github usw. ab. In der kostenlosen Variante zwar etwas eingeschränkt, aber für einen Anfang mehr als ausreichend (7000 User, 2 Provider).

Tja nun ging es daran das ganze mit meiner Laravel Anwendung (naja was mal eine werden soll) zu verheiraten. Die Dokumentation ist zwar recht gut (auch bezogen zum integrieren in Laravel) aber beim Speichern der User in meiner eigenen Datenbanken passten die Beispiele für mich nicht mehr. Also falls du auch mal ähnliches vorhast, oder ich das ganze mal erneut machen muss.. hier ein kleines Tutorial.

Als Ausgangslage, gehen wir mal davon aus:

  • Laravel 5.4 Anwendung funktioniert, und die Migrationen für die User (sind ja schon da) wurden ausgeführt
  • Auth0 Account ist eingerichtet

Zu großen Teilen folgen wir der Dokumentation von auth0 für Laravel: https://auth0.com/docs/quickstart/webapp/laravel 

Auth0 einbinden in Laravel 5.4

In deinem Projektverzeichnis, installieren wir uns erstmal das passende Packet für auth0

In der Datei: /config/app.php

Nun weichen wir von der Dokumentation etwas ab, da wir unsere User zusätzlich in unser Datenbanken speichern möchten. Dafür bauen wir uns ein UserRepository: /app/Repository/UserRepository.php mit folgendem Inhalt:

Das wir kein Passwort setzen ist gewollt, das Login wird ja über auth0 gemanaged. Was du noch machen musst, in der User-Tabelle die Spalte auth0id einfügen, die kennt Laravel natürlich vorher nicht. Die ID wird für die Zuordnung gebraucht.

Das Repository wird jetzt in unserem AppServiveProvider registriert: /app/Providers/AppServiceProvider.php

Jetzt geht es an die Konfiguration. Dafür erstellen wir die benötigen Konfigurationsdateien, und setzen auch gleich die benötigen routen für den Dienst.

In der Datei: /routes/web.php:

Die Funktionen im IndexController sehe folgendermaßen aus:

Damit ist auch schon klar, wie du später an die Benutzerdaten kommst: \Auth::user();  Nun müssen wir auth0 als Userprovider einbinden: /app/config/auth.php

Einstellungen der Anwendung

Um die nötigen Parameter für unsere Konfiguration zu bekommen, machen wir auf der Webseite von auth0 weiter. Du legst dir dort eine Web-Anwendung an, und stellst bei den URLs folgendes ein.

  • Callback: http://dein-server.de/callback
  • Logout: http://dein-server.de/logout

Das ganze sollte auch mit „localhost“ funktionieren, falls du noch keine Domain hast.

Für die Konfiguration der Anwendungen brauchen wir nun noch:

  • Domain
  • ClientID
  • ClientSecret

In deiner /app/config/laravel-auth0.php setzt du jetzt entweder direkt die Werte ein oder benutzt dein „.env“ File.

Test der Anmeldung mittels auth0

Wenn du jetzt http://dein-server.de/login aufrufst, sollte dich ein Login begrüßen und anschließend in deinem User Objekt die entsprechenden Daten sowie ein Eintrag in der Users Datenbank-Tabelle vorhanden sein.

Was in der Dokumentation noch fehlt: Wie schütze ich jetzt eigentliche eine Route? Ganz einfach über die middleware „auth“:

Fragen? Ab in die Kommentare.