I’m wracking my brain on the most simple of things.
I have a symfony-generated form with some customisation. I have the form saving just fine, except that the ‘password’ field writes the password (as expected) in normal format.
How can I intercept this value before database-entry and sha1() it before writing?
Code is essentially:
$this->dialog = $request->getParameter('dialog');
$this->form = new UserForm();
if ($this->getRequest()->getMethod() == "POST") {
$this->form->bind($request->getParameter('user'));
// intercept here, I suspect
$user = $this->form->save();
}
EDIT:
Problem solved.
in /lib/model/User.php
class User extends BaseUser {
public function save(PropelPDO $con = null) { if ($this->getPassword() != '') { $this->setPassword(sha1($this->getPassword())); } return parent::save($con); }}
It’s fairly obvious, but not for a noob like myself. hopefully this helps someone else. If there’s a better way to do this without having to extend the save() function, let me know?
Resource: http://www.symfony-project.org/jobeet/1_4/Propel/en/10 (See: Protecting the Job Form with a Token)
EDIT #2: Better way to do this (as per Grad’s suggestion below)
In User model
public function setPassword($rawPassword)
{
$salt = "fgv932g2e9dshdfkdjgf927gf8hlz082";
$password = sha1($salt . $rawPassword);
parent::setPassword($password);
}
It’s ‘better’ do override the
setPassword()function on yourUserModel.something like this:
This way you can set the password from everywhere (your current solution only works for new users).
(And, on a side note: don’t forget to salt your password. 🙂 )