From: Yuval Kogman Date: Mon, 21 Nov 2005 20:55:25 +0000 (+0000) Subject: $c->user lazy restores from session X-Git-Tag: v0.01~13 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7bb06c917947fac855ed24e728a09ec63d9fd58c;p=catagits%2FCatalyst-Plugin-Authentication.git $c->user lazy restores from session --- diff --git a/lib/Catalyst/Plugin/Authentication.pm b/lib/Catalyst/Plugin/Authentication.pm index f0b34db..9a34f44 100644 --- a/lib/Catalyst/Plugin/Authentication.pm +++ b/lib/Catalyst/Plugin/Authentication.pm @@ -5,7 +5,7 @@ package Catalyst::Plugin::Authentication; use base qw/Class::Accessor::Fast Class::Data::Inheritable/; BEGIN { - __PACKAGE__->mk_accessors(qw/user/); + __PACKAGE__->mk_accessors(qw/_user/); __PACKAGE__->mk_classdata($_) for qw/_auth_stores _auth_store_names/; } @@ -30,6 +30,22 @@ sub set_authenticated { } } +sub user { + my $c = shift; + + if ( @_ ) { + return $c->_user( @_ ); + } + + my $user = $c->_user; + + if ( $user and !Scalar::Util::blessed( $user ) ) { + return $c->auth_restore_user( $user ); + } + + return $user; +} + sub save_user_in_session { my ( $c, $user ) = @_; @@ -70,16 +86,28 @@ sub prepare { and $c->default_auth_store and !$c->user ) { - if ( $c->sessionid and my $user_id = $c->session->{__user} ) { - my $store = $c->get_auth_store( $c->session->{__user_store} ); - $c->user( $store->from_session( $c, $user_id ) ); - $c->request->{user} = $c->user; # compatibility kludge + if ( $c->sessionid and my $frozen_user = $c->session->{__user} ) { + $c->_user( $frozen_user ); } } return $c; } +sub auth_restore_user { + my ( $c, $frozen_user, $store_name ) = @_; + + $store_name ||= $c->session->{__user_store}; + $frozen_user ||= $c->session->{__user}; + + my $store = $c->get_auth_store( $store_name ); + $c->_user( my $user = $store->from_session( $c, $frozen_user ) ); + $c->request->{user} = $user; # compatibility kludge + + return $user; + +} + sub setup { my $c = shift;