使用带有PlaintextPasswordEncoder的InMemoryUserProvider配置Silex安全性

时间:2017-01-25 21:23:00

标签: php silex symfony-security

我正在尝试通过使用^/adminbasic http组件进行silex身份验证来保护symfony security路径(用于学习目的),方法是为用户提供一组原始密码,这就是我试过的

use Symfony\Component\Security\Core\User\InMemoryUserProvider;

$app['security.firewalls'] = [
    'admin' => [
        'pattern' => '^/admin',
        'http' => true,
        'security' => true,
        'users' => function () use ($app) {
            return new InMemoryUserProvider([
                'admin' => [
                    'password' => 'admin',
                    'enabled' => true,
                    'roles' => ['ROLE_ADMIN'],
                ]
            ]);
        },
];

$app->register(new Silex\Provider\SecurityServiceProvider());

等效symfony配置为:

# app/config/security.yml
security:
    providers:
        in_memory:
            memory:
                    admin:
                        password: admin
                        roles: 'ROLE_ADMIN

composer.json的部分内容如下:

  "require": {
    "silex/silex": "~2.0",
    "symfony/security": "^3.2"
  },

为什么我无法使用上述凭据登录(用户:admin,密码:admin)?

1 个答案:

答案 0 :(得分:2)

这可能是因为您使用默认编码器作为用户密码(BCrypt),而您在配置中使用的是纯文本密码。您可以使用以下命令进行更改:

use Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder;

// register this first
$app->register(new Silex\Provider\SecurityServiceProvider());

$app['security.default_encoder'] = function ($app) {
    // Plain text (e.g. for debugging)
    return new PlaintextPasswordEncoder();
};

请注意,只有在您注册security.default_encoder后才能覆盖SecurityServiceProvider服务。

您可以在documentation中了解更多相关信息。