[Catalyst] 5.80005: $c->req->remote_user and apache: excluding
actions from authentication
Tomas Doran
bobtfish at bobtfish.net
Tue Jun 9 20:26:08 GMT 2009
On 9 Jun 2009, at 19:49, Francesc Romà i Frigolé wrote:
> I also tried with <FilesMatch> which it is allowed, but it doesn't
> seem to work (which makes sense because I'm not actually matching
> any file but a catalyst action )
>
Ah, if you've got rules sending stuff to Catalyst, then stuff will be
sent to Catalyst to deal with, normal rules are unlikely to apply.
Inside Catalyst you can trivially continue the same authentication
you were using outside of Catalyst however, see
Catalyst::Authentication::Credential::HTTP and
Catalyst::Authentication::Store::Htpasswd..
> It looks very interesting. From your explanation
>
Nono, not my explanation, none of the code linked was written by me,
I just released it last.
Specifically, kmx++ for that credential.
> # in your Controller/Root.pm you can implement "auto-login" in
> this way
> sub begin : Private {
> my ( $self, $c ) = @_;
>
>
> unless ($c->user_exists) {
> # authenticate() for this module does not need any user
> info
> # as the username is taken from $c->req->remote_user and
> # password is not needed
>
>
> unless ($c->authenticate( {} )) {
> # return 403 forbidden or kick out the user in other way
> };
> }
> }
Erm, no - $c->authenticate will _always_ succeed if you're using
Credential::Remote, as the web server above you will have always
authenticated you already..
It's for use in situations where you don't want Catalyst to care
about auth, but you _do_ want to load details about the already
logged in user (from the DBIx::Class auth store for example).
> it seems that it should be possible to tell apache that
> authentication is optional, but I don't know how to do that. How
> can I make apache ask for a username/password but not return a 401
> Authorization Required error?
No.
This is implicit in the HTTP auth protocol.
You can limit it to authenticating only for some HTTP methods (which
is how publicly readable subversion works), but from the server side,
you either say 'needs auth, give the user a password prompt', or you
don't..
This (and the ugly password box) is why most 'internet' websites
implement auth with a login form - you can be a lot more flexible
about the level of user-authenticity you require at each stage...
Cheers
t0m
More information about the Catalyst
mailing list