访问 Sulu 前端中的安全服务:散列用户密码
Access to the Security services in Sulu Frontend: Hashing a Users password
我正在尝试为 Sulu CMF 前端进行用户注册。
我想散列密码。但是出于任何原因我无法获得服务。
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')
这是 conainer:debug
的一些输出
$ 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提供的命令就是利用了这个方法。它适用于开发和生产环境。
/**
* 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);
}
Sulu CMF 有一个名为 app/console webconsole 的额外控制台应用程序,它使用不同的内核:-)
我搜索的服务在那里不存在。
相反,我能够使用
$userManager = $this->container->get('sulu_security.user_manager');
正如 xabbuh 已经在评论中指出的那样,我们在 Sulu 中有两个不同的内核。如果您使用 app/webconsole
命令,则您正在使用网站的内核。
在标准安装中我们不包括 SecurityBundle
,因为它会增加一些开销,对于简单的网站来说不是必需的。但是,如果您正在构建更复杂的应用程序,您可能还想保护您的网站。在这种情况下,您可以简单地将 Symfony\Bundle\SecurityBundle\SecurityBundle
的新实例添加到 app/WebsiteKernel
中的 $bundles
数组。之后还会有你一直要求的服务。
我正在尝试为 Sulu CMF 前端进行用户注册。 我想散列密码。但是出于任何原因我无法获得服务。
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')
这是 conainer:debug
的一些输出$ 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提供的命令就是利用了这个方法。它适用于开发和生产环境。
/**
* 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);
}
Sulu CMF 有一个名为 app/console webconsole 的额外控制台应用程序,它使用不同的内核:-)
我搜索的服务在那里不存在。 相反,我能够使用
$userManager = $this->container->get('sulu_security.user_manager');
正如 xabbuh 已经在评论中指出的那样,我们在 Sulu 中有两个不同的内核。如果您使用 app/webconsole
命令,则您正在使用网站的内核。
在标准安装中我们不包括 SecurityBundle
,因为它会增加一些开销,对于简单的网站来说不是必需的。但是,如果您正在构建更复杂的应用程序,您可能还想保护您的网站。在这种情况下,您可以简单地将 Symfony\Bundle\SecurityBundle\SecurityBundle
的新实例添加到 app/WebsiteKernel
中的 $bundles
数组。之后还会有你一直要求的服务。