}
## User can provide an arrayref containing the arguments to search on the user class.
- ## or even provide a prepared resultset, allowing maximum flexibility for user retreival.
+ ## or even provide a prepared resultset, allowing maximum flexibility for user retrieval.
## these options are only available when using the dbix_class authinfo hash.
if ($dbix_class_config && exists($authinfo->{'result'})) {
$self->_user($authinfo->{'result'});
#
## if use_userdata_from_session is defined in the config, we fill in the user data from the session.
if (exists($self->config->{'use_userdata_from_session'}) && $self->config->{'use_userdata_from_session'} != 0) {
- my $obj = $self->resultset->new_result({ %$frozenuser });
+
+ # We need to use inflate_result here since we -are- inflating a
+ # result object from cached data, not creating a fresh one.
+ # Components such as EncodedColumn wrap new() to ensure that a
+ # provided password is hashed on the way in, and re-running the
+ # hash function on data being restored is expensive and incorrect.
+
+ my $class = $self->resultset->result_class;
+ my $source = $self->resultset->result_source;
+ my $obj = $class->inflate_result($source, { %$frozenuser });
+
$obj->in_storage(1);
$self->_user($obj);
return $self;
my $self = shift;
return $self->SUPER::can(@_) || do {
my ($method) = @_;
- if (my $code = $self->_user->can($method)) {
+ if (not ref $self) {
+ undef;
+ } elsif (not $self->_user) {
+ undef;
+ } elsif (my $code = $self->_user->can($method)) {
sub { shift->_user->$code(@_) }
} elsif (my $accessor =
try { $self->_user->result_source->column_info($method)->{accessor} }) {
(my $method) = (our $AUTOLOAD =~ /([^:]+)$/);
return if $method eq "DESTROY";
+ return unless ref $self;
+
if (my $code = $self->_user->can($method)) {
return $self->_user->$code(@_);
}
=head2 AUTOLOAD
-Delegates method calls to the underlieing user row.
+Delegates method calls to the underlying user row.
=head2 can
-Delegates handling of the C<< can >> method to the underlieing user row.
+Delegates handling of the C<< can >> method to the underlying user row.
=head1 BUGS AND LIMITATIONS