PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Un semplice sistema di accesso/autorizzazione che utilizza Dancer e Postgres

Dancer::Plugin::Auth::Extensible si prende cura di un sacco di codice boilerplate per te. Puoi ottenere un semplice sistema di accesso attivo e funzionante senza dover scrivere il tuo /login percorsi come segue.

Configura Dancer::Plugin::Auth::Extensible

Installa Dancer::Plugin::Database e Dancer::Plugin::Auth::Extensible::Provider::Database e aggiungilo a config.yml :

session: "YAML"

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

Configura la connessione al database

Configura la connessione al database in environments/development.yml in modo da poter avere diverse configurazioni per lo sviluppo e la produzione. Ecco come appare la configurazione per MySQL, con le credenziali di connessione (nome database, host, nome utente e password) memorizzate in un file di opzioni separato database.cfg :

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

Per Postgres, dovresti usare un .pgpass file per memorizzare le credenziali di connessione. Assicurati che il file non sia leggibile dal mondo intero. Vedi questo post di Stack Overflow per un esempio. Verifica che il tuo file delle credenziali funzioni sulla riga di comando e che il tuo server web possa leggerlo.

La tua tabella esistente sembra conforme a schema suggerito nei documenti, ma anche in caso contrario, puoi modificare i nomi delle tabelle e delle colonne in configurazione .

Blocca i tuoi percorsi

Aggiungi il require_login parola chiave a un percorso che si desidera proteggere. Un /login il percorso verrà generato automaticamente con un modulo di accesso di base, anche se puoi crea il tuo se ti va.

lib/MyApp.pm

package MyApp;
use Dancer ':syntax';

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

our $VERSION = '0.1';

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

true;

(Sì, questo è davvero tutto il codice che devi scrivere. Te l'avevo detto che si occupa di un sacco di standard.)

Crypt::SaltedHash viene utilizzato per eseguire l'hashing delle password automaticamente. Nota che non dovresti mai memorizzare password in chiaro nel tuo database; quando aggiungi un utente al tuo database, dovresti generare un hash della password e archiviare l'hash.

Si noti che i ruoli sono disabilitati in questo esempio. Se abiliti i ruoli, puoi fare altre belle cose come consentire solo agli utenti con il ruolo di amministratore di visualizzare le pagine di amministrazione.