Fix issue if you have auth store plugins before authentication plugin
[catagits/Catalyst-Plugin-Authentication.git] / lib / Catalyst / Plugin / Authentication.pm
index 1ea5b7a..91ac80b 100644 (file)
@@ -12,7 +12,7 @@ use Tie::RefHash;
 use Class::Inspector;
 use Catalyst::Authentication::Realm;
 
-our $VERSION = "0.10011";
+our $VERSION = "0.10013";
 
 sub set_authenticated {
     my ( $c, $user, $realmname ) = @_;
@@ -165,10 +165,10 @@ sub find_realm_for_persisted_user {
     } else {
         ## we have no choice but to ask each realm whether it has a persisted user.
         foreach my $realmname (@{$c->_auth_realm_restore_order}) {
-            my $ret = $c->auth_realms->{$realmname}->user_is_restorable($c);
-            if ($ret) {
-                return $c->auth_realms->{$realmname};
-            }
+            my $realm = $c->auth_realms->{$realmname}
+                || Catalyst::Exception->throw("Could not find authentication realm '$realmname'");
+            return $realm
+                if $realm->user_is_restorable($c);
         }
     }
     return undef;
@@ -342,14 +342,13 @@ sub setup_auth_realm {
 
 sub auth_realms {
     my $self = shift;
+    $self->_authentication_initialize(); # Ensure _auth_realms created!
     return($self->_auth_realms);
 }
 
 sub get_auth_realm {
     my ($app, $realmname) = @_;
-    
     return $app->auth_realms->{$realmname};
-    
 }
 
 
@@ -626,7 +625,7 @@ This means that our application will begin like this:
         Authentication
     /;
 
-    __PACKAGE__->config->{'Plugin::Authentication'} = 
+    __PACKAGE__->config( 'Plugin::Authentication' => 
                 {  
                     default => {
                         credential => {
@@ -649,7 +648,8 @@ This means that our application will begin like this:
                                }                       
                            }
                        }
-                };
+                }
+    );
 
 This tells the authentication plugin what realms are available, which
 credential and store modules are used, and the configuration of each. With
@@ -745,7 +745,7 @@ efficient to maintain a hash of users, so you move this data to a database.
 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 => {
@@ -760,7 +760,8 @@ changing your config:
                                    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.
@@ -769,7 +770,7 @@ new source. The rest of your application is completely unchanged.
 =head1 CONFIGURATION
 
     # example
-    __PACKAGE__->config->{'Plugin::Authentication'} = 
+    __PACKAGE__->config( 'Plugin::Authentication' => 
                 {  
                     default_realm => 'members',
 
@@ -796,7 +797,8 @@ new source. The rest of your application is completely unchanged.
                                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 
@@ -986,6 +988,8 @@ L<Catalyst::Authentication::Realm>
 
 =item L<Catalyst::Authentication::Credential::Kerberos>
 
+=back
+
 =head2 Authorization
 
 L<Catalyst::Plugin::Authorization::ACL>,
@@ -1024,7 +1028,7 @@ 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'} = 
+    __PACKAGE__->config( 'Plugin::Authentication'} => 
                 {  
                     default_realm => 'members',
                     realms => {
@@ -1032,9 +1036,10 @@ realms inside a "realms" key in the configuration.
                             ...
                         },
                     },
-                };
+                }
+    );
 
-If you use the old, deprecated C<< __PACKAGE__->config->{'authentication'} >>
+If you use the old, deprecated C<< __PACKAGE__->config( 'authentication' ) >>
 configuration key, then the realms key is still required.
 
 =head1 COMPATIBILITY ROUTINES
@@ -1068,7 +1073,7 @@ included here for reference only.
 
 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.
@@ -1107,7 +1112,11 @@ Jess Robinson
 
 David Kamholz
 
-Tomas Doran (t0m), C<bobtfish@bobtfish.net> 
+Tomas Doran (t0m), C<bobtfish@bobtfish.net>
+
+kmx
+
+Nigel Metheringham
 
 =head1 COPYRIGHT & LICENSE