[Catalyst] Legacy porting to auto-authenticate a logged in user

Ashley Pond V apv at sedition.com
Sun Dec 23 19:10:25 GMT 2007


You've hit it. You are better than my Teddy bear lately. I wasn't  
thinking straight. Since the password is coming from the DB instead  
of a user form, it's already in SHA1 so it should be treated for the  
sake of authentication as clear since SHA1 != SHA1(SHA1).

Thanks and to Peter for the other ideas for future debuggery, so to  
speak!

-Ashley

On Dec 23, 2007, at 10:29 AM, Jay K wrote:

> Hi Ashley,
>
> My guess is that your password hashing type in the db is different
> from the password hashing type you defined for the Password  
> credential.
>
> Since your database does store the password in plaintext - why not set
> password type to 'clear' - and set the password_field to password.
> This should cause authentication to happen against your unencrypted
> password and should work.
>
> Jay
>
>
> On Dec 23, 2007, at 10:10 AM, Ashley Pond V wrote:
>
>> Thanks for the idea. Didn't work. After following the code trail
>> back through a few namespaces and lots of config v class_data v ....
>> eyes glaze over, I fixed it by setting the password_type to "none"
>> and merely authenticating on the "username."
>>
>> This is fine in this case but it's obviously less than ideal. If
>> anyone has insight into what I'm doing wrong with my original
>> version, I'd love to hear it.
>>
>> WORKING VERSION (username isn't guaranteed unique so I went with the
>> Id instead):
>>
>>  $c->authenticate({ acctid => $user->acctid })
>>       or die "RC_403: " . $user->username . ": " . $user->acctid . "
>> failed to authenticate";
>>
>> authentication:
>>   default_realm: users
>>   realms:
>>     users:
>>       credential:
>>         class: Password
>>         password_type: none
>> #        password_hash_type: SHA-1
>> #        password_field: crypt_passwd
>>      store:
>>        class: DBIx::Class
>>        user_class: DB::User
>>        id_field: acctid
>>
>>
>> On Dec 22, 2007, at 3:44 AM, Peter Edwards wrote:
>>
>>> Try
>>>
>>>    $c->authenticate({ acctid => $user->username,
>>>                       password => $user->password })
>>>        or die "RC_403: " . $user->username . " failed to
>>> authenticate";
>>>
>>> Regards, Peter
>>>
>>>
>>> -----Original Message-----
>>> From: Ashley Pond V [mailto:apv at sedition.com]
>>> Sent: 22 December 2007 08:08
>>> To: The elegant MVC web framework
>>> Subject: [Catalyst] Legacy porting to auto-authenticate a logged in
>>> user
>>>
>>> I have what I first thought was a gimme (this is only tangentially
>>> related to the questions I asked a few days ago; same app, different
>>> DB and part). Legacy porting of a "login" with Authenticate where I
>>> already have the user id and everything verified. I have tried many
>>> permutations of arguments and setup.
>>>
>>> The user has already logged into the legacy part of the app. So this
>>> is the code that is not working but I think should.
>>>
>>>    my $user_id = ...legacy fetch; working fine
>>>    my $user = $c->model("DB::User")->find($user_id)
>>>        or die "RC_403: No such user for id $user_id"; # also working
>>> fine
>>>
>>>    # this dies, I've verified the $user, username, and password are
>>> correct
>>>    $c->authenticate({ username => $user->username,
>>>                       password => $user->password })
>>>        or die "RC_403: " . $user->username . " failed to
>>> authenticate";
>>>
>>> So. why? The legacy setup is a little strange so I think that  
>>> must be
>>> it. The user table's DBIC looks like this (password is plaintext,
>>> legacy, and crypt_passwd is sha1 of it)-
>>>
>>>  package MyApp::DB::User;
>>>  use base qw/DBIx::Class/;
>>>  __PACKAGE__->load_components(qw/PK::Auto Core/);
>>>  __PACKAGE__->table('foo.account');
>>>  __PACKAGE__->add_columns(qw/ acctid email fname lname password
>>> crypt_passwd /);
>>>  __PACKAGE__->set_primary_key('acctid');
>>>
>>>  sub username {
>>>      +shift->email;
>>>  };
>>>
>>> My config looks like this-
>>>
>>>  authentication:
>>>    default_realm: users
>>>    realms:
>>>      users:
>>>        credential:
>>>          class: Password
>>>          password_field: crypt_passwd
>>>          password_type: hashed
>>>          password_hash_type: SHA-1
>>>        store:
>>>          class: DBIx::Class
>>>          user_class: DB::User
>>>          id_field: acctid
>>>
>>>
>>> Thanks for looking!
>>> -Ashley
>>>
>>>
>>> _______________________________________________
>>> List: Catalyst at lists.scsys.co.uk
>>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>>> Searchable archive: http://www.mail-archive.com/ 
>>> catalyst at lists.rawmode.org/
>>> Dev site: http://dev.catalyst.perl.org/
>>>
>>>
>>> _______________________________________________
>>> List: Catalyst at lists.scsys.co.uk
>>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>>> Searchable archive: http://www.mail-archive.com/ 
>>> catalyst at lists.rawmode.org/
>>> Dev site: http://dev.catalyst.perl.org/
>>
>>
>> _______________________________________________
>> List: Catalyst at lists.scsys.co.uk
>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>> Searchable archive: http://www.mail-archive.com/ 
>> catalyst at lists.rawmode.org/
>> Dev site: http://dev.catalyst.perl.org/
>
> ---
> America will never be destroyed from the outside. If we falter and
> lose our freedoms, it will be because we destroyed ourselves. --
> Abraham Lincoln
>
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/ 
> catalyst at lists.rawmode.org/
> Dev site: http://dev.catalyst.perl.org/




More information about the Catalyst mailing list