Mojolicious-Plugin-Fondation-Auth
view release on metacpan or search on metacpan
Model name used for authentication (default: `user`). Must match a model
declared by [Mojolicious::Plugin::Fondation::User](https://metacpan.org/pod/Mojolicious%3A%3APlugin%3A%3AFondation%3A%3AUser) or another plugin.
{ 'Fondation::Auth' => { model => 'admin' } }
- provider
Provider class for authentication (default:
`Mojolicious::Plugin::Fondation::Auth::Provider::DBIx`).
Must implement `validate_user`, `load_user`, and `auth_form`.
{ 'Fondation::Auth' => { provider => 'MyApp::Auth::Provider::LDAP' } }
- username\_column
Column name for user login (default: `username`).
- password\_column
Column name for the Argon2id password hash (default: `password`).
lib/Mojolicious/Plugin/Fondation/Auth.pm view on Meta::CPAN
label => 'Model Name',
type => 'string',
default => 'user',
placeholder => 'Model name from Fondation::User',
},
{
key => 'provider',
label => 'Auth Provider Class',
type => 'string',
default => 'Mojolicious::Plugin::Fondation::Auth::Provider::DBIx',
placeholder => 'Perl class implementing validate_user, load_user, auth_form',
},
{
key => 'username_column',
label => 'Username Column',
type => 'string',
default => 'username',
},
{
key => 'password_column',
label => 'Password Column',
lib/Mojolicious/Plugin/Fondation/Auth.pm view on Meta::CPAN
%$config,
app => $app,
);
# ââ Authentication plugin ââââââââââââââââââââââââââââââââââââââââ
$app->plugin('Authentication' => {
session_key => $config->{session_key},
load_user => sub ($app, $uid) {
return $provider->load_user($app, $uid);
},
validate_user => sub ($c, $username, $password, $extra = {}) {
return $provider->validate_user($c, $username, $password, $extra);
},
});
# ââ Helpers ââââââââââââââââââââââââââââââââââââââââââââââââââââââ
$app->helper(auth_form => sub ($c) {
return $provider->auth_form($c);
});
# ââ Routes âââââââââââââââââââââââââââââââââââââââââââââââââââââââ
my $r = $app->routes;
lib/Mojolicious/Plugin/Fondation/Auth.pm view on Meta::CPAN
Model name used for authentication (default: C<user>). Must match a model
declared by L<Mojolicious::Plugin::Fondation::User> or another plugin.
{ 'Fondation::Auth' => { model => 'admin' } }
=item provider
Provider class for authentication (default:
C<Mojolicious::Plugin::Fondation::Auth::Provider::DBIx>).
Must implement C<validate_user>, C<load_user>, and C<auth_form>.
{ 'Fondation::Auth' => { provider => 'MyApp::Auth::Provider::LDAP' } }
=item username_column
Column name for user login (default: C<username>).
=item password_column
Column name for the Argon2id password hash (default: C<password>).
lib/Mojolicious/Plugin/Fondation/Auth/Provider.pm view on Meta::CPAN
package Mojolicious::Plugin::Fondation::Auth::Provider;
$Mojolicious::Plugin::Fondation::Auth::Provider::VERSION = '0.04';
use Mojo::Base -base, -signatures;
has 'app';
has 'name'; # provider name (ex: 'file', 'dbix')
has 'timeout_sessions';
# Methods that each concrete provider must implement
sub validate_user { die "Method 'validate_user' must be implemented by provider" }
sub load_user { die "Method 'load_user' must be implemented by provider" }
# Helper to log easily from any provider
# sub log ($self, $level, $message) {
# return unless $self->app && $self->app->can('log');
# $self->app->log->$level("Auth::Multi::$self->name: $message");
# }
sub log ($self) {
return unless $self->app && $self->app->can('log');
lib/Mojolicious/Plugin/Fondation/Auth/Provider.pm view on Meta::CPAN
=head1 VERSION
version 0.04
=head1 SYNOPSIS
package Mojolicious::Plugin::Fondation::Auth::Provider::File;
use Mojo::Base 'Mojolicious::Plugin::Fondation::Auth::Provider', -signatures;
# Then implement validate_user() and load_user()
=head1 NAME
Mojolicious::Plugin::Fondation::Auth::Provider - Base class for authentication providers
=head1 AUTHOR
Daniel Brosseau <dab@cpan.org>
=head1 COPYRIGHT AND LICENSE
lib/Mojolicious/Plugin/Fondation/Auth/Provider/DBIx.pm view on Meta::CPAN
$self->model
? "DBIx provider initialized for model '$self->{model}'"
: "DBIx provider initialized (model will be resolved from model_list)"
);
return $self;
}
# ââ Authentication ââââââââââââââââââââââââââââââââââââââââââââââââââââ
sub validate_user ($self, $c, $username, $password, $extra = {}) {
return undef unless $username && $password;
my $schema = $self->_schema($c);
return undef unless $schema;
my $source = $self->_source($c);
return undef unless $source;
my $user = $schema->resultset($source)->search({
$self->username_column => $username,
lib/Mojolicious/Plugin/Fondation/Auth/Provider/DBIx.pm view on Meta::CPAN
username_column => 'username', # optional, default: 'username'
password_column => 'password', # optional, default: 'password'
});
=head1 DESCRIPTION
This provider authenticates users against a L<DBIx::Class> schema, using
L<Mojolicious::Plugin::Fondation::Model::DBIx::Async> for backend configuration
discovery.
Authentication operations (C<validate_user>, C<load_user>) use a synchronous
L<DBIx::Class::Schema> instance built from the same backend config. This is
necessary because L<Mojolicious::Plugin::Authentication> requires synchronous
callbacks.
Password hashing (Argon2id) is handled by the Result class
(L<Mojolicious::Plugin::Fondation::Auth::Schema::Result::User>) via
C<insert>/C<update> hooks â the provider only verifies.
=head1 NAME
( run in 1.340 second using v1.01-cache-2.11-cpan-ad19def0cd9 )