use base qw/Class::Accessor::Fast Class::Data::Inheritable/;
-BEGIN {
- __PACKAGE__->mk_accessors(qw/_user/);
-}
+__PACKAGE__->mk_accessors(qw/_user/);
use strict;
use warnings;
+use MRO::Compat;
use Tie::RefHash;
use Class::Inspector;
use Catalyst::Authentication::Realm;
-our $VERSION = "0.10009_01";
+our $VERSION = "0.10011";
sub set_authenticated {
my ( $c, $user, $realmname ) = @_;
$c->persist_user();
- $c->NEXT::set_authenticated($user, $realmname);
+ $c->maybe::next::method($user, $realmname);
}
sub user {
## if we have a valid session handler - we store the
## realm in the session. If not - we have to hope that
## the realm can recognize its frozen user somehow.
- if ($c->isa("Catalyst::Plugin::Session") &&
+ if ($c->can('session') &&
$c->config->{'Plugin::Authentication'}{'use_session'} &&
$c->session_is_valid) {
$realm->remove_persisted_user($c);
}
- $c->NEXT::logout(@_);
+ $c->maybe::next::method(@_);
}
sub find_user {
my $c = shift;
my $realm;
- if ($c->isa("Catalyst::Plugin::Session")
+ if ($c->can('session')
and $c->config->{'Plugin::Authentication'}{'use_session'}
and $c->session_is_valid
and exists($c->session->{'__user_realm'})) {
$c->_user( my $user = $realm->restore_user( $c, $frozen_user ) );
# this sets the realm the user originated in.
- $user->auth_realm($realm->name);
+ $user->auth_realm($realm->name) if $user;
return $user;
my $app = shift;
$app->_authentication_initialize();
- $app->NEXT::setup(@_);
+ $app->next::method(@_);
}
## the actual initialization routine. whee.
Authentication
/;
- __PACKAGE__->config->{'Plugin::Authentication'} =
+ __PACKAGE__->config( 'Plugin::Authentication' =>
{
default => {
credential => {
}
}
}
- };
+ }
+ );
This tells the authentication plugin what realms are available, which
credential and store modules are used, and the configuration of each. With
You can accomplish this simply by installing the L<DBIx::Class|Catalyst::Authentication::Store::DBIx::Class> Store and
changing your config:
- __PACKAGE__->config->{'Plugin::Authentication'} =
+ __PACKAGE__->config( 'Plugin::Authentication'} =>
{
default_realm => 'members',
members => {
role_column => 'roles'
}
}
- };
+ }
+ );
The authentication system works behind the scenes to load your data from the
new source. The rest of your application is completely unchanged.
=head1 CONFIGURATION
# example
- __PACKAGE__->config->{'Plugin::Authentication'} =
+ __PACKAGE__->config( 'Plugin::Authentication' =>
{
default_realm => 'members',
authserver => '192.168.10.17'
}
}
- };
+ }
+ );
+
+NOTE: Until version 0.10008 of this module, you would need to put all the
+realms inside a "realms" key in the configuration. Please see
+L</COMPATIBILITY CONFIGURATION> for more information
=over 4
=item use_session
Whether or not to store the user's logged in state in the session, if the
-application is also using L<Catalyst::Plugin::Session>. This
+application is also using L<Catalyst::Plugin::Session>. This
value is set to true per default.
+However, even if use_session is disabled, if any code touches $c->session, a session
+object will be auto-vivified and session Cookies will be sent in the headers. To
+prevent accidental session creation, check if a session already exists with
+if ($c->sessionid) { ... }. If the session doesn't exist, then don't place
+anything in the session to prevent an unecessary session from being created.
+
=item default_realm
This defines which realm should be used as when no realm is provided to methods
This was a short-lived method to update user information - you should use persist_user instead.
+=head2 $c->setup_auth_realm( )
+
+=head1 OVERRIDDEN METHODS
+
+=head2 $c->setup( )
+
=head1 SEE ALSO
This list might not be up to date. Below are modules known to work with the updated
=head2 User Storage Backends
-L<Catalyst::Authentication::Store::Minimal>,
-L<Catalyst::Authentication::Store::DBIx::Class>,
+=over
+
+=item L<Catalyst::Authentication::Store::Minimal>
+
+=item L<Catalyst::Authentication::Store::DBIx::Class>
+
+=item L<Catalyst::Authentication::Store::LDAP>
+
+=item L<Catalyst::Authentication::Store::RDBO>
+
+=item L<Catalyst::Authentication::Store::Model::KiokuDB>
+
+=item L<Catalyst::Authentication::Store::Jifty::DBI>
+
+=item L<Catalyst::Authentication::Store::Htpasswd>
+
+=back
=head2 Credential verification
-L<Catalyst::Authentication::Credential::Password>,
+=over
+
+=item L<Catalyst::Authentication::Credential::Password>
+
+=item L<Catalyst::Authentication::Credential::HTTP>
+
+=item L<Catalyst::Authentication::Credential::OpenID>
+
+=item L<Catalyst::Authentication::Credential::Authen::Simple>
+
+=item L<Catalyst::Authentication::Credential::Flickr>
+
+=item L<Catalyst::Authentication::Credential::Testing>
+
+=item L<Catalyst::Authentication::Credential::AuthTkt>
+
+=item L<Catalyst::Authentication::Credential::Kerberos>
+
+=back
=head2 Authorization
modules. These include L<Catalyst::Plugin::Authentication::Simple>,
L<Catalyst::Plugin::Authentication::CDBI>.
-At the time of writing these plugins have not yet been replaced or updated, but
-should be eventually: L<Catalyst::Plugin::Authentication::OpenID>,
-L<Catalyst::Plugin::Authentication::CDBI::Basic>,
-L<Catalyst::Plugin::Authentication::Basic::Remote>.
-
=head1 INCOMPATABILITIES
The realms-based configuration and functionality of the 0.10 update
covered in L<Catalyst::Plugin::Authentication::Internals>. We hope that most
modules will move to the compatible list above very quickly.
+=head1 COMPATIBILITY CONFIGURATION
+
+Until version 0.10008 of this module, you needed to put all the
+realms inside a "realms" key in the configuration.
+
+ # example
+ __PACKAGE__->config( 'Plugin::Authentication'} =>
+ {
+ default_realm => 'members',
+ realms => {
+ members => {
+ ...
+ },
+ },
+ }
+ );
+
+If you use the old, deprecated C<< __PACKAGE__->config( 'authentication' ) >>
+configuration key, then the realms key is still required.
+
=head1 COMPATIBILITY ROUTINES
In version 0.10 of L<Catalyst::Plugin::Authentication>, the API
Return the store whose name is 'default'.
-This is set to C<< $c->config->{'Plugin::Authentication'}{store} >> if that value exists,
+This is set to C<< $c->config( 'Plugin::Authentication' => { store => # Store} ) >> if that value exists,
or by using a Store plugin:
# load the Minimal authentication store.
=head2 $c->get_user( )
-=head2 $c->setup( )
-
-=head2 $c->setup_auth_realm( )
-
=head1 AUTHORS
Yuval Kogman, C<nothingmuch@woobling.org>
David Kamholz
+Tomas Doran (t0m), C<bobtfish@bobtfish.net>
+
=head1 COPYRIGHT & LICENSE
Copyright (c) 2005 the aforementioned authors. All rights