我正在尝试通过使用^/admin
和basic 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
)?
答案 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中了解更多相关信息。