[Catalyst] Remote authN not getting username from remote_user()

Trevor Leffler tleffler at uw.edu
Wed Sep 22 23:40:53 GMT 2010


Hi, I'm using:

Catalyst::Runtime -- 5.80022
Catalyst::Plugin::Authentication -- 0.10016

I'm finding that C::Request->remote_user is not returning my username 
when I have authenticated under apache, whereas the deprecated 
C::R->user does.

This means that C::AuthN::Cred::Remote->authenticate fails under "option 
2" -- elsif ($c->req->can('remote_user')) {...} -- since yes, it can(), 
but alas 'undef' is the return value.

I'm unclear on how C::Request->remote_user is populated, or maybe I'd 
have figured out what's [not] going on here.

Any pointers, hints, perl packages that may need an upgrade, etc?

Thanks,
--Trevor


FWIW, here are relevant snippets from my App.pm and App::C::Root:

__PACKAGE__->config(
   name => 'App',

   'Plugin::Authentication' => {
     default_realm => 'remoterealm',

     realms => {
       remoterealm => {
         credential => {
           class        => 'Remote',
         },
         store => {class => 'Null',},
       },
     },
   },
);


sub begin : Private {
   my ($self, $c) = @_;

   my $r = $c->req;

   # returns yes, 'undef'
   warn "*** can remote_user? ", ($r->can('remote_user') ? 'yes' : 
'no'), "\n";
   my $ru = $r->remote_user;
   warn "*** remote_user: [", (defined $ru ? $ru : 'undef'), "]\n";

   # returns yes, 'tleffler'
   warn "*** can user? ", ($r->can('user') ? 'yes' : 'no'), "\n";
   my $u = $r->user;
   warn "*** user: [", (defined $u ? $u : 'undef'), "]\n";

   # returns $VAR1 = undef;
   use Data::Dumper;
   warn "*** env...", Dumper $c->engine->env;

   unless ($c->user_exists) {
     unless ($c->authenticate({})) {
       warn "*** failed authN ***\n";   # I get here
       $c->response->status(HTTP::Status::RC_FORBIDDEN());
     }
   }
}




More information about the Catalyst mailing list