2011-08-05 41 views
2

如果你使用一個數據庫來存儲用戶,你可以保存用戶信息,如下圖所示:(從the Symfony security bookSymfony2代碼組織:在保存db之前,應該在哪裏加密密碼的邏輯呢?

$factory = $this->get('security.encoder_factory'); 
$user = new Acme\UserBundle\Entity\User(); 

$encoder = $factory->getEncoder($user); 
$password = $encoder->encodePassword('mypassword', $user->getSalt()); 
$user->setPassword($password); 

不過,我想創建可重複使用的用戶表單:

namespace App\Bundle\WebBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class UserType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder 
      ->add('username') 
      ->add('password') 
     ; 
    } 

    public function getName() 
    { 
     return 'app_bundle_webbundle_usertype'; 
    } 
} 

和使用形式中的控制器: (從here

if ($request->getMethod() == 'POST') { 
    $form->bindRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getEntityManager(); 
     $em->persist($task); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('task_success')); 
    } 
} 

你應該在這篇文章的開頭(以及爲了生成鹽的代碼)中顯示你的密碼,以便使它可重複使用並與$ form-> bindRequest()方法兼容,如果您需要用戶註冊表單和用戶個人資料編輯表單等?

回答

0

密碼加密可以放在Doctrine的@PrePersist回調方法中。

0

在模型中?

在setter中,你可以添加你的加密。