[Dbix-class] moving from Auth::Store::DBIC to Auth::Store::DBIx::Class

Fernan Aguero fernan.aguero at gmail.com
Thu Apr 1 20:26:40 GMT 2010


Hi,

after reading lots of warnings in our logs about
Authentication::Store::DBIC being deprecated, I thought about devoting
some time to move to its replacement,
Authentication::Store::DBIx::Class, but upon starting to work on this
I've also started to hit on some problems.

So, my first question to the list would be about the availability of a
guide of things to look for, other incompatble plugins, etc.

I presume others have already made the switch ...

Now, basically, I'm trying to move from (old code, using Auth::Store::DBIC):

this is my lib/app.pm:
use Catalyst qw/
 ConfigLoader
 Static::Simple
 Session
 Session::PerUser
 Session::Store::DBIC
 Session::State::Cookie
 Authentication
 Authentication::Store::DBIC
 Authentication::Credential::Password
 Authorization::Roles
 Params::Nested
 StackTrace
 Scheduler
 Captcha
 -Debug
/;

and this is my app.yml configuration file:
 authentication:
  dbic:
   user_class: weight::Users
   user_field: username
   password_field: password
   password_type: hashed
   password_hash_type: MD5
   session_data_field: session_data

 authorization:
   dbic:
     role_class: weight::Roles
     role_field: role
     role_rel: map_user_role
     user_role_user_field: userid


which was working fine, to the following:


this is my attempt at updating lib/app.pm (removed two lines):
use Catalyst qw/
  ConfigLoader
  Static::Simple
  Session
  Session::PerUser
  Session::Store::DBIC
  Session::State::Cookie
  Authentication
  Authorization::Roles
  Params::Nested
  StackTrace
  Scheduler
  Captcha
  -Debug
  /;

app.yml (reorganized based on SYNOPSIS of Auth::Store::DBIx::Class):
authentication:
 default_realm: users
 realms:
  users:
   credential:
    class: Password
    password_field: password
    password_type: hashed
    password_hash_type: MD5
   store:
    class: DBIx::Class
    user_model: weight::Users
    role_relation: roles
    role_field: role
    session_data_field: session_data

The built-in server starts up OK, and works OK (session works, our
cart-like history functionality works) but upon login I get some
errors, from subs imported from Session::PerUser I guess (I'm
overriding the merge_session_to_user sub to do some more intelligent
merging of the items in the user's history).

However if I comment out that section I still get this:

Caught exception in portfolio::Controller::user->login "Can't locate
object method "user" via package
"Catalyst::Plugin::Session::Store::DBIC::Delegate" at
/usr/local/share/perl/5.10.0/Catalyst/Plugin/Session/Store/DBIC.pm
line 181."

Stack Trace

Package	Line	File
portfolio::Controller::user	42	/home/fernan/lib/app/Controller/user.pm
   39: 		if ( $username && $password ) {
   40:
   41: 				# attempt to login
   42: 				if ( $c->authenticate(
   43: 						{ username => $username, password => $password },
   44: 						'users'
   45: 					) ) {

I can certainly provide more details on the code, but at this moment I
started to think that maybe
Catalyst::Plugin::Session::Store::DBIC::Delegate is incompatible with
Catalyst::Authentication::Store::DBIx::Class?

Thanks in advance for any help on this.

Cheers,

-- 
fernan



More information about the DBIx-Class mailing list