Организация кода Symfony2: куда должна идти логика для шифрования пароля перед сохранением в db? - PullRequest
2 голосов
/ 05 августа 2011

Если вы используете базу данных для хранения пользователей, вы можете сохранить информацию о ней, как показано ниже: (от книга безопасности Symfony .)

$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';
    }
}

И используйте форму в контроллере: (с здесь )

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 ( ) подход, если вам нужна как форма регистрации пользователя, так и форма редактирования профиля пользователя и т. д.

Ответы [ 3 ]

2 голосов
/ 07 августа 2011

Рекомендую посмотреть: https://github.com/FriendsOfSymfony/FOSUserBundle. Даже если вы хотите написать собственное решение, вы можете получить очень хорошие идеи из этого пакета.

0 голосов
/ 17 октября 2012

в модели?

В установщике вы можете добавить свое шифрование.

0 голосов
/ 08 августа 2011

Шифрование пароля лучше всего использовать в методе обратного вызова Doctrine's @PrePersist.

...