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 <[EMAIL PROTECTED]>:
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 <[EMAIL PROTECTED]>:

>  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: [email protected]
> Listinfo:  http://lists.rawmode.org/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/[email protected]/
> Dev site:  http://dev.catalyst.perl.org/
>



_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to