Php 如何在Silex中将密码编码器连接到用户界面?
因此,我试图创建一个新的Silex应用程序,并使用其中包含的安全包。为了简单起见,我打算使用基本的密码编码 根据Silex文档,我创建了一个自定义用户提供程序。但是,此用户界面似乎没有使用默认密码编码 我可以成功地从中获取密码Php 如何在Silex中将密码编码器连接到用户界面?,php,symfony,silex,Php,Symfony,Silex,因此,我试图创建一个新的Silex应用程序,并使用其中包含的安全包。为了简单起见,我打算使用基本的密码编码 根据Silex文档,我创建了一个自定义用户提供程序。但是,此用户界面似乎没有使用默认密码编码 我可以成功地从中获取密码 $password = $app['security.encoder.digest']->encodePassword('foo'); 但是当我使用这个例子时 // find the encoder for a UserInterface instance $en
$password = $app['security.encoder.digest']->encodePassword('foo');
但是当我使用这个例子时
// find the encoder for a UserInterface instance
$encoder = $app['security.encoder_factory']->getEncoder($user);
// compute the encoded password for foo
$password = $encoder->encodePassword('foo', $user->getSalt());
我明白了
RuntimeException:尚未为帐户配置编码器
在symfony2中,我将使用如下内容
encoders:
somename:
class: Acme\DemoBundle\Entity\User
Acme\DemoBundle\Entity\User: sha512
Acme\DemoBundle\Entity\User: plaintext
Acme\DemoBundle\Entity\User:
algorithm: sha512
encode_as_base64: true
iterations: 5000
Acme\DemoBundle\Entity\User:
id: my.custom.encoder.service.id
但这里的情况似乎并非如此。我似乎找不到任何类型的setEncoder方法,因此我有点困惑。您需要重建
编码器工厂来添加自定义实现:
<?php
$app = new Silex\Application();
$app['myapp.encoder.base64'] = new Base64PasswordEncoder();
$app['security.encoder_factory'] = $app->share(function ($app) {
return new EncoderFactory(
array(
'Symfony\Component\Security\Core\User\UserInterface' => $app['security.encoder.digest'],
'MyApp\Model\UserInterface' => $app['myapp.encoder.base64'],
)
);
});
我可以使用公认的答案来解决我的问题,但我无法直接将其分配给security.encoder\u factory
,所以我只是分享我发现的有用信息
而不是:
$app['security.encoder_factory'] = $app->share(function($app) {
//..see above...//
});
我必须使用:
$app->register(new Silex\Provider\SecurityServiceProvider(),array(
'security.encoder_factory' => $app->share(function($app) {
//... same as above ...//
})
));
我对Silex来说太新了,不知道为什么它不能像上面那样为我工作。我最初的猜测是版本不同(这个问题是两年前提出的)。在调用注册模块之前,我可以分配到security.provider.default
,但我似乎无法分配到security.encoder\u factory
。我似乎还必须在寄存器调用中设置安全防火墙。这很有意义。我认为这是沿着这些思路的某个地方,但是silex文档说所有东西都使用默认值。多谢各位!