2016-01-11 5 views
3

Я пытаюсь сделать регистрацию пользователя для интерфейса Sulu CMF. Я хочу хэш-паролей. Но по любой причине я не могу получить Сервис.Доступ к службам безопасности в Sulu Frontend: Хеширование пароля пользователя

You have requested a non-existent service "security.encoder_factory". 

Или

You have requested a non-existent service "security.password_encoder" 

Если я попросить

app/console container:debug | grep encode 

Обе услуги там

$ app/console container:debug | grep encode      
263: security.encoder_factory              Symfony\Component\Security\Core\Encoder\EncoderFactory          
266: security.password_encoder              Symfony\Component\Security\Core\Encoder\UserPasswordEncoder         

У вас есть совет для меня? Мой контроллер осознает контейнер и мой код выглядит следующим образом:

$this->container->get('security.password_encoder') 

Heres какой-то выход из conainer: отладки

$ app/console container:debug security.password_encoder 
[container] Information for service security.password_encoder 
Service Id  security.password_encoder 
Class   Symfony\Component\Security\Core\Encoder\UserPasswordEncoder 
Tags    - 
Scope   container 
Public   yes 
Synthetic  no 
Lazy    no 
Synchronized  no 
Abstract   no 


$ app/console container:debug security.encoder_factory 
[container] Information for service security.encoder_factory 
Service Id  security.encoder_factory 
Class   Symfony\Component\Security\Core\Encoder\EncoderFactory 
Tags    - 
Scope   container 
Public   yes 
Synthetic  no 
Lazy    no 
Synchronized  no 
Abstract   no 

Мои в настоящее время установлена ​​версия Symfony является v2.6.12

команда, предоставленная sulu, использует этот метод. Он работает в обеих средах, dev и prod.

/** 
* Encodes the given password, for the given password, with he given salt and returns the result. 
* 
* @param $user 
* @param $password 
* @param $salt 
* 
* @return mixed 
*/ 
private function encodePassword($user, $password, $salt) 
{ 
    /** @var PasswordEncoderInterface $encoder */ 
    $encoder = $this->getContainer()->get('security.encoder_factory')->getEncoder($user); 

    return $encoder->encodePassword($password, $salt); 
} 
+0

Я звоню с контроллера. Там я расширяю Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller (который расширяет ContainerAware). – psren

+0

Какую версию Symfony вы используете? И можете ли вы показать вывод 'php app/console container: debug security.password_encoder' и' php app/console container: debug security.encoder_factory'? – xabbuh

+0

Спасибо за ваш ответ. Я добавил более подробно выше. – psren

ответ

2

Как xabbuh уже отмечалось в комментариях, мы имеем два различных ядра в Сулу. Если вы используете команду app/webconsole, вы используете Ядро для Веб-сайта.

В стандартной установке мы не включаем SecurityBundle, так как он добавляет некоторые накладные расходы и не нужен для простых веб-сайтов. Однако, если вы создаете более сложное приложение, вы также можете защитить свой веб-сайт. В этом случае вы можете просто добавить новый экземпляр Symfony\Bundle\SecurityBundle\SecurityBundle в массив $bundles в app/WebsiteKernel. После этого также будет доступна услуга, о которой вы просили.

1

Сулу CMF имеет дополнительное приложение консольное приложение под названием/консоль webconsole, которая использует различные ядра :-)

Службу я искал не там, существующую. Вместо я был в состоянии использовать

$userManager = $this->container->get('sulu_security.user_manager'); 
+0

Это возможное решение, в зависимости от того, что вы хотите сделать. Добавит еще один ответ, чтобы достичь того, что вы действительно попросили. –

+0

Спасибо за ответ вам (все). Я уже выполнил свою задачу сейчас. Моя проблема заключалась в том, что я не видел, что у SULU разные ядра :-) – psren

Смежные вопросы