[Catalyst] Maintenance release: C::P::Authentication

marcus baker marcus.baker at gmail.com
Mon Jul 23 20:00:28 GMT 2007


I should note that the furthest I was able to trace this down within
Catalyst was to line 26 in the new() method of
Catalyst::Plugin::Authentication::Store::DBIx::Class::User:

my @pks = $self->{'resultset'}->result_source->primary_columns;

$self having been instantiated as follows starting in line 15:
    my $self = {
        resultset => $c->model($config->{'user_class'}),
        config => $config,
        _roles => undef,
        _user => undef
    };

It seems like $self->{resultset} ends up as my User class
((App)::Model::DBIC::User) but somewhere withing the calling of
result_source on it, it is dying.

-Marcus

2007/7/23, marcus baker <marcus.baker at gmail.com>:
> Is it possible that the latest C::P::Authentication updates are also affecting Catalyst::Plugin::Authentication::Store::DBIx::Class?  Using the recent modules (including Catalyst-Plugin-Authentication-0.10002 which I'm assuming is this maintenance release) I'm continuing to get the following error when I try running the authenticate() method, passing in a username and password in a hashref:
>
> Caught exception in (App)::Controller::Root->login "Can't use string ("(App)::Model::DBIC::User") as a HASH ref while "strict refs" in use at /usr/local/share/perl/5.8.7/Class/Accessor/Grouped.pm line 251."
>
> (App) being my application's package name, and my authentication / authorization configuration as follows:
>
>                      authentication => {
>                          default_realm => 'users',
>                          realms => {
>                              users => {
>                                  credential => {
>                                      class => 'Password',
>                                      password_field => 'password',
>                                      password_type => 'hashed',
>                                      password_hash_type => 'SHA-1',
>                                  },
>                                  store => {
>                                      class => 'DBIx::Class',
>                                      user_field => 'username',
>                                      user_class => 'DBIC::User',
>                                      role_relation => 'user_roles',
>                                      role_field => 'role'
>                                  },
>                              },
>                          },
>                      },
>                       authorization => {
>                          dbic => {
>                              role_class => 'DBIC::Role',
>                               role_field => 'role',
>                              role_rel => 'user_roles',
>                              user_role_user_field => 'user',
>                         }
>                      },
>
> The related plugins loaded are:  Authentication (0.10002), Authentication::Credential::Password (?), Authorization::Roles (0.05), and Authorization::ACL (0.08)
>
> Class::Accessor::Grouped ( 0.07000)
> DBIx::Class (0.08003)
>
> Thanks
> -Marcus
>
>
> 2007/7/21, Jay K <jayk at ion0.com>:
>
> >  Hey all,
> >
> > Turns out there was a minor bug in C::P::Authentication - this didn't
> > affect updated modules, but it did limit the compatibility of older
> > modules with the new Auth.
> >
> > I've uploaded a maintenance release to CPAN which fixes this bug.
> > I should also note that after fixing this bug, the LDAP module is now
> > fully compatible with realms (with a slightly different config)
> >
> > Basically - you avoid placing the LDAP store in the 'use Catalyst'
> > line and instead configure auth as follows:
> >
> > > __PACKAGE__->config(
> > >         authentication => {
> > >             default_realm => 'users',
> > >             realms => {
> > >                 users => {
> > >                     credential => {
> > >                         class => 'Password',
> > >                         password_field => 'password',
> > >                         password_type => 'self_check',
> > >                     },
> > >                     store => {
> > >                         class => 'LDAP::Backend',
> > >                           [ ... rest of LDAP config ]
> > >                       }
> > >                   }
> > >               }
> > >           }
> > >       );
> >
> > Then just replace your $c->login call with $c->authenticate, as follows:
> >
> > > old:
> > >
> > > $c->login($username, $password);
> > >
> > > new:
> > >
> > > $c->authenticate({ id => $username, password => $password });
> >
> > I post this because this may work with other 'old-style' modules too
> > - and is worth trying as an initial step towards migrating to realms.
> >
> > Anyway - thanks to Wade (aka waswas) for helping track this problem
> > down.
> >
> > JayK
> >
> >
> >
> > ---
> > For most things, throwing yourself at the wall over and over is a
> > better way to improve than thinking hard about the wall and taking
> > pictures of it.  -- D.Litwack
> >
> >
> >
> > _______________________________________________
> > List: Catalyst at lists.rawmode.org
> > Listinfo:  http://lists.rawmode.org/mailman/listinfo/catalyst
> > Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
> > Dev site:  http://dev.catalyst.perl.org/
> >
>
>



More information about the Catalyst mailing list