| Authen-Simple-CDBI documentation | Contained in the Authen-Simple-CDBI distribution. |
Authen::Simple::CDBI - Simple Class::DBI authentication
use Authen::Simple::CDBI;
my $cdbi = Authen::Simple::CDBI->new(
class => 'MyApp::Model::User'
);
if ( $cdbi->authenticate( $username, $password ) ) {
# successfull authentication
}
# or as a mod_perl Authen handler
PerlModule Authen::Simple::Apache
PerlModule Authen::Simple::CDBI
PerlSetVar AuthenSimpleDBI_class "MyApp::Model::User"
<Location /protected>
PerlAuthenHandler Authen::Simple::CDBI
AuthType Basic
AuthName "Protected Area"
Require valid-user
</Location>
Class::DBI authentication.
This method takes a hash of parameters. The following options are valid:
Class::DBI subclass. Required.
class => 'MyApp::Model::User'
Name of username column. Defaults to username.
username => 'username'
Name of password column. Defaults to password.
password => 'password'
Any object that supports debug, info, error and warn.
log => Log::Log4perl->get_logger('Authen::Simple::CDBI')
Returns true on success and false on failure.
Christian Hansen ch@ngmedia.com
This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.
| Authen-Simple-CDBI documentation | Contained in the Authen-Simple-CDBI distribution. |
package Authen::Simple::CDBI; use strict; use warnings; use base 'Authen::Simple::Adapter'; use Carp qw[]; use Params::Validate qw[]; our $VERSION = 0.2; __PACKAGE__->options({ class => { type => Params::Validate::SCALAR, optional => 0 }, username => { type => Params::Validate::SCALAR, default => 'username', optional => 1 }, password => { type => Params::Validate::SCALAR, default => 'password', optional => 1 } }); sub init { my ( $self, $params ) = @_; my $class = $params->{class}; my $username = $params->{username}; my $password = $params->{password}; unless ( eval "require $class;" ) { Carp::croak( qq/Failed to require class '$class'. Reason: '$@'/ ); } unless ( $class->isa('Class::DBI') ) { Carp::croak( qq/Class '$class' is not a subclass of 'Class::DBI'./ ); } unless ( $class->find_column($username) ) { Carp::croak( qq/Class '$class' does not have a username column named '$username'/ ); } unless ( $class->find_column($password) ) { Carp::croak( qq/Class '$class' does not have a password column named '$password'/ ); } return $self->SUPER::init($params); } sub check { my ( $self, $username, $password ) = @_; my ( $class, $user, $encrypted ) = ( $self->class, undef, undef ); unless ( $user = $class->retrieve( $self->username => $username ) ) { $self->log->debug( qq/User '$username' was not found with class '$class'./ ) if $self->log; return 0; } $encrypted = $user->get( $self->password ); unless ( defined $encrypted && length $encrypted ) { $self->log->debug( qq/Encrypted password for user '$username' is null./ ) if $self->log; return 0; } unless ( $self->check_password( $password, $encrypted ) ) { $self->log->debug( qq/Failed to authenticate user '$username'. Reason: 'Invalid credentials'/ ) if $self->log; return 0; } $self->log->debug( qq/Successfully authenticated user '$username' with class '$class'./ ) if $self->log; return 1; } 1; __END__