- Published on
Transform password into digest inside a DBIx::Class model
- Authors
- Name
- Kevin Old
- @kevinold
I'm working on a project using Catalyst , and I initially coded the password hashing (compare the passwords then build the digest, used during the signup and change password processes) directly into my controller (could be placed in a Utils package) and passed the digest to the create/update like so:
my $pass = $c->req->param("password");
my $digest = Digest->new('MD5')->add($pass)->digest;
...
$c->user->password($digest);
Reading the Catalyst mailing list I learned about store_column(), part of DBIx::Class::Row .
Upon storage of a row (an update or create), it allows you to override the default "store this value" and manipulate the value into whatever you'd like.
Using the code below I was able to move this logic out of the controller/Utils package and into the model where it belongs.
sub store_column {
my( $self, $col, $val ) = @_;
$val = Digest->new('MD5')->add($val)->digest
if $col eq 'password';
return $self->next::method( $col, $val );
}
This technique can also be used to perform calculations .