php – 如何将密码编码器附加到Silex中的用户界面?

所以我试图创建一个新的Silex应用程序并使用包含的安全包.为了简单起见,我将使用基本密码编码.

根据Silex文档http://silex.sensiolabs.org/doc/providers/security.html,我创建了一个自定义用户提供程序.但是,此用户界面似乎不使用认密码编码.

我可以成功地获取密码

$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: No encoder has been configured for account

在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方法,所以我有点难过.

解决方法:

您需要重新构建EncoderFactory以添加自定义实现:

<?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'],
        )
    );
});

(哦,请,不要使用Base64Encoder()作为密码;))

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...