PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Un système de connexion/autorisation simple utilisant Dancer et Postgres

Dancer::Plugin::Auth::Extensible s'occupe de beaucoup de code passe-partout pour vous. Vous pouvez obtenir un système de connexion simple et opérationnel sans avoir à écrire votre propre /login itinéraires comme suit.

Configurer Dancer::Plugin::Auth::Extensible

Installez Dancer::Plugin::Database et Dancer::Plugin::Auth::Extensible::Provider::Database et ajoutez ceci à config.yml :

session: "YAML"

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

Configurer la connexion à la base de données

Configurez votre connexion à la base de données dans environments/development.yml afin que vous puissiez avoir différentes configurations pour le développement et la production. Voici à quoi ressemble la configuration pour MySQL, avec les identifiants de connexion (nom de la base de données, hôte, nom d'utilisateur et mot de passe) stockés dans un fichier d'options séparé database.cfg :

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

Pour Postgres, vous devez utiliser un .pgpass fichier pour stocker vos identifiants de connexion. Assurez-vous que le fichier n'est pas lisible par tous. Voir ce message Stack Overflow à titre d'exemple. Vérifiez que votre fichier d'informations d'identification fonctionne sur la ligne de commande et que votre serveur Web peut le lire.

Votre table existante semble être conforme au schéma suggéré dans la documentation, mais même si ce n'est pas le cas, vous pouvez ajuster les noms de table et de colonne dans le configuration .

Verrouillez vos itinéraires

Ajoutez le require_login mot-clé à une route que vous souhaitez protéger. Un /login route sera généré automatiquement avec un formulaire de connexion de base, bien que vous puissiez créez les vôtres si vous le souhaitez.

lib/MonApp.pm

package MyApp;
use Dancer ':syntax';

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

our $VERSION = '0.1';

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

true;

(Oui, c'est vraiment tout le code que vous avez à écrire. Je vous ai dit qu'il prend en charge beaucoup de passe-partout.)

Crypt::SaltedHash est utilisé pour hacher automatiquement les mots de passe. Notez que vous ne devez jamais stocker de mots de passe en clair dans votre base de données ; lorsque vous ajoutez un utilisateur à votre base de données, vous devez générer un hachage du mot de passe et stocker le hachage.

Notez que les rôles sont désactivés dans cet exemple. Si vous activez les rôles, vous pouvez faire d'autres choses intéressantes comme autoriser uniquement les utilisateurs ayant le rôle d'administrateur à afficher les pages d'administration.