Add doc notes
[catagits/Catalyst-Plugin-Authentication.git] / lib / Catalyst / Plugin / Authentication.pm
index d624cae..1ea5b7a 100644 (file)
@@ -2,18 +2,17 @@ package Catalyst::Plugin::Authentication;
 
 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 ) = @_;
@@ -34,7 +33,7 @@ sub set_authenticated {
 
     $c->persist_user();    
     
-    $c->NEXT::set_authenticated($user, $realmname);
+    $c->maybe::next::method($user, $realmname);
 }
 
 sub user {
@@ -99,7 +98,7 @@ sub persist_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) {
         
@@ -132,7 +131,7 @@ sub logout {
         $realm->remove_persisted_user($c);
     }
     
-    $c->NEXT::logout(@_);
+    $c->maybe::next::method(@_);
 }
 
 sub find_user {
@@ -154,7 +153,7 @@ sub find_realm_for_persisted_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'})) {
@@ -189,7 +188,7 @@ sub auth_restore_user {
     $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;
 
@@ -201,7 +200,7 @@ sub setup {
     my $app = shift;
 
     $app->_authentication_initialize();
-    $app->NEXT::setup(@_);
+    $app->next::method(@_);
 }
 
 ## the actual initialization routine. whee.
@@ -799,14 +798,24 @@ new source. The rest of your application is completely unchanged.
                        }
                 };
 
+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
@@ -885,6 +894,10 @@ changed the user data and want to ensure that future requests reflect the
 most current data.  Assumes that at the time of this call, $c->user 
 contains the most current data.
 
+=head2 find_realm_for_persisted_user()
+
+Private method, do not call from user code!
+
 =head1 INTERNAL METHODS
 
 These methods are for Catalyst::Plugin::Authentication B<INTERNAL USE> only.
@@ -918,6 +931,12 @@ Retrieves the realm instance for the realmname provided.
 
 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
@@ -929,12 +948,43 @@ L<Catalyst::Authentication::Realm>
 
 =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>
 
 =head2 Authorization
 
@@ -956,11 +1006,6 @@ This module along with its sub plugins deprecate a great number of other
 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 
@@ -973,6 +1018,25 @@ configs. The changes required to update modules are relatively minor and are
 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
@@ -1033,10 +1097,6 @@ Register stores into the application.
 
 =head2 $c->get_user( )
 
-=head2 $c->setup( )
-
-=head2 $c->setup_auth_realm( )
-
 =head1 AUTHORS
 
 Yuval Kogman, C<nothingmuch@woobling.org>
@@ -1047,6 +1107,8 @@ Jess Robinson
 
 David Kamholz
 
+Tomas Doran (t0m), C<bobtfish@bobtfish.net> 
+
 =head1 COPYRIGHT & LICENSE
 
         Copyright (c) 2005 the aforementioned authors. All rights