Ein Login-System mit PHP? Na klar, das geht und ziemlich schnell schief. Und darum sollte man tunlichst die Finger davon lassen, das Rad jedes mal neu zu erfinden. Besser man greift auf bestehende Frameworks zurück und spart sich so viele Anfängerfehler und auch erfahrene Programmierer profitieren von der Sicherheit solcher Frameworks.
Ich möchte dir in diesem Artikel zeigen, wie du das PHP-Framework HUGE auf einem Uberspace installierst. HUGE ist primär ein Benutzer-Authentifizerungssystem. Das Framework hat zwar sein Soft End Of Life erreicht, wird also nicht mehr mit neuen Funktionalitäten erweitert, bekommt aber immer noch Sicherheitsupdates und Fehlerbehebungen. Auf Grund seines Fokus als Authentifizierungssystem und des KISS-Prinzips halte ich es aber als Einstieg in die Welt der Frameworks für gut geeignet.
Wem HUGE zu klein ist, dem seien an dieser Stelle die großen Brüder Yii, Symfony oder Laravel ans Herz gelegt.
Voraussetzungen
Für diese Anleitung brauchst du nur ganz wenige Voraussetzungen. Du brauchst einen Uberspace, ein wenig Erfahrung mit der Shell und SSH. In den auf diesen Artikel aufbauenden Tutorials brauchst du dann natürlich auch noch PHP- und MySQL-Skills.
Im Folgenden gehe ich davon aus, dass du dich per SSH auf deinen Uberspace geschaltet hast. Lokal auf deiner eigenen Maschine wird nichts erledigt.
Download per Git
HUGE wird (aktuell) auf GitHub gehostet und kann damit ganz einfach per Git heruntergeladen werden. Um genau zu sein lädst du dir einfach das ganze Git-Repository in dein html-Verzeichnis. Dazu wechselst du kurz dort hin.
$ cd html
Danach klonst du HUGE in deinen Uberspace.
$ git clone https://github.com/panique/huge.git
Composer
Wenn du nun im Browser das Verzeichnis huge aufrufst, erwartet dich aktuell noch ein leere weiße Seite. Du musst erst noch notwendige Abhängigkeiten installieren. Dazu benötigst du Composer. Wie du Composer auf einem Uberspace installierst, das hat zum Glück schon Dominik in seinem Blog erklärt.
Nach der Installation kannst du mittels Composer nun alle Abhängigkeiten von HUGE installieren. Dazu wechseln wir vorher noch in das Verzeichnis von HUGE.
$ cd huge $ composer install
Avatare
Nun musst du noch kurz dem Avatar-Verzeichnis Schreibrechte gewähren, damit Nutzer dort später ihre Benutzerbildchen hochladen können.
$ cd public $ chmod 0777 avatars
In dem Avatar-Verzeichnis liegt auch noch eine .htaccess-Datei, welche ein Flag nutzt, dass unter dem Uberspace-Setting nicht funktioniert und bei der Anzeige von Avataren zu einem Internen Serverfehler führen würde. Dazu öffnen wir die Datei mit vim (einen Schnelleinstieg in vim findest du bei scotch.io).
$ vim avatars/.htaccess
Dort findest du die Zeile php_flag engine off. Diese soll eigentlich bewirken, dass keine PHP-Dateien in diesem Ordner ausgeführt werden und so einen Schutz vor unerlaubter Code-Ausführung gewährleisten. Das klappt allerdings nur, wenn PHP als Apache-Modul ausgeführt wird, was bei Uberspace nicht der Fall ist. Wir können diese Zeile aber ersatzlos streichen, da bereits die Zeile darüber (über den Kommentaren) dies bewirken soll. Du kannst die Zeile entweder komplett entfernen oder mit einem # vorweg deaktivieren.
Konfiguration
Danach steht die Konfiguration des Frameworks an. Dazu brauchst du aber noch das Datenbankpasswort. Das findest du so heraus:
$ cat ~/.my.cnf
Unter der Zeile [client] findest du das Passwort. Mit der Maus kannst du es markieren und mittels [Strg]+[Shift]+C kopieren.
Dazu wechselst du ins Konfigurationsverzeichnis und öffnest die Konfigurationsdatei dann mit vim.
$ cd ~/html/huge/application/config $ vim config.developement.php
Unter DB_NAME und DB_USER trägst du deinen Uberspace-Namen und unter DB_PASS dein Datenbankpasswort (mittels [Strg]+[Shift]+V) ein.
Damit das Framework sauber E-Mails versenden kann, um zum Beispiel ein Passwort-vergessen-Link zu verschicken, legst du dir noch ein E-Mailkonto im Uberspace an und gibst die Zugangsdaten in der Konfigurationsdatei an.
Dort musst du folgende Variablen anpassen: EMAIL_SMTP_HOST, EMAIL_SMTP_USERNAME, EMAIL_SMTP_PASSWORD
Außerdem schaltest du EMAIL_USE_SMTP auf true und EMAIL_SMTP_PORT stellst du auf 587. Nachtrag: Ändere außerdem noch EMAIL_SMTP_ENCRYPTION auf tls.
Datenbank
Das Framework hat zwar jetzt Zugriff auf deine Datenbank, allerdings liegt noch kein Datenbankschema vor, liegen noch keine Tabellen drin. Die nötigen SQL-Befehle liefert das Framework unter application/_installation mit. Dort findest du drei Dateien: 01-create-database.sql, 02-create-table-users.sql, 03-create-table-notes.sql.
An den Namen der Dateien sieht man schon recht gut für was sie da sind. Die erste Datei ist ganz klein und zur Einrichtung einer Datenbank gedacht. Die brauchst du nicht, denn du hast ja schon eine Datenbank (die du oben in die Konfiguration eingetragen hast).
Die anderen zwei Tabellen sind zur Speicherung der Userdaten sowie für die Daten einer kleiner Beispielanwendung für Notizen gedacht. Diese beiden Tabellen brauchst du, allerdings musst du die Dateien noch ein wenig anpassen, denn sie verwenden den falschen Datenbanknamen huge. Eine Datenbank mit solchen Namen besitzt du allerdings nicht und kannst sie auch nicht anlegen (wenn dein Uberspace-Name nicht zufällig gerade huge lautet).
Daher ersetzt du in den zwei Dateien den Datenbanknamen mit deinem Uberspace-Namen. Dazu nutzt du das Kommandozeilen-Werkzeug sed. In dem Befehl wird die Umgebungsvariable $USER genutzt, welche durch das Terminal direkt durch deinen Uberspace-Namen ersetzt wird.
$ sed -i 's/huge/$USER/g' 02-create-table-users.sql $ sed -i 's/huge/$USER/g' 03-create-table-notes.sql
Jetzt musst du die Befehle der beiden sql-Dateien nur noch in die Datenbank kriegen. Das erledigt der Befehl mysql für dich, dem du den Inhalt der Dateien übergibst. Auch hier nutzt du wieder die Umgebungsvariable.
$ mysql $USER < 02-create-table-users.sql $ mysql $USER < 03-create-table-notes.sql
Finished!
Das war es! Du kannst deine Installation von HUGE nun aufrufen und dich unter login mit dem Admin-Nutzerkonto demo und dem Passwort 12345678 einloggen. Es existiert auch noch ein normales Nutzerkonto namens demo2 und dem gleichen Passwort. Am besten legst du dir direkt ein neues Admin-Konto an und löschst die beiden alten Konten.
HUGE ist veraltet – ich würde auf neuere Systeme wie z.B. rexo.ch setzen. Zudem läuft HUGE mit PHP 7.1 nicht rchtig ;-(
Hey Patrick,
kein Problem, wenn du dir hier deine eigenen Open-Source-Lösungen vorstellst, aber schreib das dann doch auch hinzu.
Beste Grüße
Pascua