PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ein einfaches Anmelde-/Autorisierungssystem mit Dancer und Postgres

Dancer::Plugin::Auth::Extensible kümmert sich um eine Menge Boilerplate-Code für Sie. Sie können ein einfaches Anmeldesystem zum Laufen bringen, ohne einen eigenen /login schreiben zu müssen Routen wie folgt.

Konfiguriere Dancer::Plugin::Auth::Extensible

Installieren Sie Dancer::Plugin::Database und Dancer::Plugin::Auth::Extensible::Provider::Database und fügen Sie dies zu config.yml hinzu :

session: "YAML"

plugins:
  Auth::Extensible:
    realms:
      users:
        provider: 'Database'
        disable_roles: 1

Datenbankverbindung konfigurieren

Konfigurieren Sie Ihre Datenbankverbindung in environments/development.yml damit Sie unterschiedliche Konfigurationen für Entwicklung und Produktion haben können. So sieht die Konfiguration für MySQL aus, wobei die Verbindungsinformationen (Datenbankname, Host, Benutzername und Passwort) in einer separaten Optionsdatei database.cfg gespeichert sind :

plugins:
  Database:
    dsn: 'dbi:mysql:;mysql_read_default_file=/path/to/database.cfg'
    dbi_params:
      RaiseError: 1
      AutoCommit: 1

Für Postgres sollten Sie einen .pgpass Datei zum Speichern Ihrer Verbindungsdaten. Stellen Sie sicher, dass die Datei nicht weltweit lesbar ist. Siehe diesen Stack Overflow-Beitrag zum Beispiel. Testen Sie, ob Ihre Datei mit Anmeldeinformationen auf der Befehlszeile funktioniert und ob Ihr Webserver sie lesen kann.

Ihre vorhandene Tabelle scheint dem Vorgeschlagenes Schema in der Dokumentation, aber selbst wenn dies nicht der Fall ist, können Sie die Tabellen- und Spaltennamen im Konfiguration .

Sperren Sie Ihre Routen

Fügen Sie require_login hinzu Schlüsselwort zu einer Route, die Sie schützen möchten. Ein /login Route wird automatisch mit einem einfachen Anmeldeformular generiert, obwohl Sie erstellen Sie Ihre eigenen wenn du magst.

lib/MyApp.pm

package MyApp;
use Dancer ':syntax';

use Dancer::Plugin::Auth::Extensible;

our $VERSION = '0.1';

get '/' => require_login sub {
    template 'index';
};

true;

(Ja, das ist wirklich der gesamte Code, den Sie schreiben müssen. Ich habe Ihnen gesagt, dass er sich um eine Menge Textbausteine ​​kümmert.)

Crypt::SaltedHash wird verwendet, um Passwörter automatisch zu hashen. Beachten Sie, dass Sie niemals Klartext-Passwörter in Ihrer Datenbank speichern sollten; Wenn Sie Ihrer Datenbank einen Benutzer hinzufügen, sollten Sie einen Hash des Passworts generieren und den Hash speichern.

Beachten Sie, dass Rollen in diesem Beispiel deaktiviert sind. Wenn Sie Rollen aktivieren, können Sie andere raffinierte Dinge tun wie nur Benutzern mit der Admin-Rolle erlauben, Admin-Seiten anzuzeigen.