使用 InMemoryUserProvider 和 PlaintextPasswordEncoder 配置 Silex 安全性
Configure Silex security with InMemoryUserProvider with PlaintextPasswordEncoder
我正在尝试使用 silex
和 symfony security
组件通过 basic http
身份验证来保护 ^/admin
路径(用于学习目的),方法是向一组用户提供原始密码,这是我试过的
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
)?
这可能是因为您使用的是用户密码的默认编码器 (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();
};
请记住,您只有在注册 SecurityServiceProvider
后才能覆盖 security.default_encoder
服务。
您可以在 documentation 中阅读更多相关信息。
我正在尝试使用 silex
和 symfony security
组件通过 basic http
身份验证来保护 ^/admin
路径(用于学习目的),方法是向一组用户提供原始密码,这是我试过的
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
)?
这可能是因为您使用的是用户密码的默认编码器 (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();
};
请记住,您只有在注册 SecurityServiceProvider
后才能覆盖 security.default_encoder
服务。
您可以在 documentation 中阅读更多相关信息。