--- On Sat, 7/5/08, Dr. Jennifer Nussbaum <[EMAIL PROTECTED]> wrote:
> From: Dr. Jennifer Nussbaum <[EMAIL PROTECTED]> > Subject: Re: [Catalyst] Debugging Auth code > To: "J. Shirley" <[EMAIL PROTECTED]> > Cc: "The elegant MVC web framework" <[email protected]> > Date: Saturday, July 5, 2008, 1:38 PM > --- On Sat, 7/5/08, J. Shirley <[EMAIL PROTECTED]> > wrote: > From: J. Shirley <[EMAIL PROTECTED]> > Subject: Re: [Catalyst] Debugging Auth code > To: [EMAIL PROTECTED] > Cc: "The elegant MVC web framework" > <[email protected]> > Date: Saturday, July 5, 2008, 10:35 AM > > On Sat, Jul 5, 2008 at 9:25 AM, Dr. Jennifer Nussbaum > <[EMAIL PROTECTED]> wrote: > > > > My password field is called "password", so i > left it out of the > config, > > because the > > docs say that this is the default and therefore > unnecessary. > > > > I thought that the id_field was the name of the id; i > do have an id value, > > but of course the user just enters a name, not their > database id. > > > > In any case I changed the config to: > > > > > __PACKAGE__->config->{'Plugin::Authentication'} > = { > > default_realm => 'dbic', > > realms => { > > dbic => { > > credential => { > > class => 'Password', > > password_field => 'password', > > password_type => 'clear' > > }, > > store => { > > class => 'DBIx::Class', > > user_class => > 'CiteEditorDB::User', > > id_field => 'login' > > } > > } > > } > > }; > > > > (Sorry about the indentation, its not cut-and-pasting > well.) > > > > And i have the same result--"[debug] Unable to > locate user matching > user > > info provided" > > in my log. > > > > Anything else i can try? Thank you! > > > > Jen > > > > --- On Sat, 7/5/08, J. Shirley > <[EMAIL PROTECTED]> wrote: > > > > From: J. Shirley <[EMAIL PROTECTED]> > > Subject: Re: [Catalyst] Debugging Auth code > > To: [EMAIL PROTECTED], "The elegant MVC web > framework" > > <[email protected]> > > Date: Saturday, July 5, 2008, 9:05 AM > > > > On Sat, Jul 5, 2008 at 7:01 AM, Dr. Jennifer Nussbaum > > <[EMAIL PROTECTED]> wrote: > >> Hi, > >> > >> Im trying to convert a legacy program over to > Catalyst, and in the > process > >> have > >> tried to use the new Auth framework that i havent > used before. Im > having > >> some > >> problems that i cant debug, though, even though it > looks like im doing > >> things right. > >> > >> I got my setup from the docs and Tutorial. In my > base class i use > >> Authentication, > >> Session Session::Store::DBIC, and > Session::State::Cookie. My config > is: > >> > >> > __PACKAGE__->config->{'Plugin::Authentication'} > = { > >> default_realm => 'dbic', > >> realms => { > >> dbic => { > >> credential => > > { > >> class => 'Password', > >> password_type => 'clear' > >> }, > >> store => { > >> class => 'DBIx::Class', > >> user_class => 'MyDB::User' > >> } > >> } > >> } > >> }; > >> > >> (By the way i dont really know what > 'realms' does, as im not > using > > them now, > >> but > >> i thought that i can just use anything as long as > im not using it > > directly.) > >> > >> Then my login routine includes: > >> > >> my $username = > $c->request->params->{username} || > ""; > >> my $password = > $c->request->params->{password} || > ""; > >> > >> # If the username and password values were found > in form > >> if ($username && $password) { > >> $c->log->debug("we have a > username and pw"); > >> $c->log->debug("username is > >$username<, > password > > is > > >$password<"); > >> # Attempt to log the user in > >> if ($c->authenticate({ login => > $username, > >> password => $password })) { > >> # ... > >> > >> (The name of my "username" field in the > underlying table is > > "login" for > >> legacy > >> reasons. But i thought thta using "login > => $username" > would > > address this; > >> login is the right column in the table itself.) > >> > >> When i run DBIC_TRACE, the SQL that's executed > _does_ return the > user > > object > >> associated with this username and password combo. > However, when i run > > this, > >> my log shows: > >> > >> [debug] Path is "login" > >> [debug] we have a username and pw > >> [debug] username is >testuser<, password is > >passw0rd< > >> [debug] Unable to locate user matching user info > provided > >> > >> Since the SQL is returning the right thing, and > everything else looks > > OK, > > i > >> cant > >> tell why this is failing. Can someone give me some > advice on debugging > > this? > >> > >> Thanks! > >> > >> > > > > Hi Jennifer, > > > > Looks like you are missing the > "password_field" config > parameter: > > > http://search.cpan.org/~jayk/Catalyst-Plugin-Authentication-0.10006/lib/Catalyst/Authentication/Credential/Password.pm#CONFIGURATION > > > > Also, you need to have the "id_field" set in > your store > > configuration: > > > http://search.cpan.org/~jayk/Catalyst-Authentication-Store-DBIx-Class-0.104/lib/Catalyst/Authentication/Store/DBIx/Class.pm#CONFIGURATION > > > > That would be the name of your username field in your > MyDB::User class. > > > > > > One thing to check is that you don't have any > older versions of > > Catalyst::Plugin::Authentication::* laying around > (especially > > Catalyst::Plugin::Authentication::Store::DBIx::Class > or > > > Catalyst::Plugin::Authentication::Credential::Password) - > that may be > > causing some confusion internally. > > The only version of C::P::A::C::P i have is the > compatibility shim with > no real working lines. I dont have C::P::A::S::DBIx::Class > at all. > > Ive been trying to debug this, adding further debugging > code, and still > cant figure out whats going on. I reach the > "authenticate" line, and > DBIC_TRACE reports that the right DB query is being fired > off, which if > i run it in the mysql command-line program does return the > right info. > But "authenticate" doesnt authenticate it. There > must be some reason why > its not finding the user, but i cant figure out what it is. > > Any further debugging ideas? Ive been over this several > times now, i just > cant see what im missing. > > Thank you. Never mind, i got it! I delete users by setting deleted, a datetime value, = a current timestamp. Normally deleted is set to NULL, but there are some cases where deleted is set to the 0 time (for current users). Normally i check to see if deleted IS NULL or deleted = 0, but DBIC is apparently quoting this, so that it looks for "deleted = '0'", which is not the same as "deleted = 0", and if the value is a datetime of 0000-00-00 00:00:00, then it does not equal '0'. In other words, i was simply not finding my user because DBIC was doing the wrong thing. I realize this is a DBIC question, but how can i check for this correctly? In my Schema class, I have: __PACKAGE__->resultset_attributes({ where => {deleted => [ undef, 0 ] }, order_by => 'login' }); which someone here showed me a while ago; how do i change this to generate ..."deleted = 0" instead of "deleted = '0'"? Thanks! Jen _______________________________________________ List: [email protected] Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
