我正在努力解决silex安全问题:
我有以下内容:
$app->register(new Silex\Provider\SecurityServiceProvider());
以及后来:
$app['security.firewalls'] = array(
'admin' => array(
'pattern' => '^/admin',
'http' => true,
'users' => array(
// raw password is foo
'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='),
),
),
);
但是当我点击路径" localhost / admin"我得到了:
Found error: No route found for "GET /admin"
无法理解silex rly页面上的文档。我应该使用控制器注册安全过滤器吗?
在控制器中定义如下函数:
public function admin(){
return 'Hello';
}
并且路线是:
$app->get('/admin', 'app.vendor_controller:admin');
现在我得到了:
Hello
一旦我点击路径/管理员,没有身份验证表单。所以没有包含身份验证过程...
EDIT ~~~~~~~~~~~~~~~~~~~~~
好的,所以现在点击url / admin之后我会收到带有字段的身份验证横幅,作为用户和密码,我输入admin,foo但是对此没有影响。
`A username and password are being requested by http://localhost:8080. The site says: “Secured”`
代码如下:
$app['security.firewalls'] = array(
'admin' => array(
'pattern' => '/admin',
'http' => true,
'users' => array(
'admin' => array('ROLE_ADMIN', 'foo')
)));
$app['security.access_rules'] = array(
array('/admin', 'ROLE_ADMIN'),
);
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'pattern' => '/admin',
'http' => true,
'users' => array(
// raw password is foo
'admin' => array('ROLE_ADMIN', 'foo'),
))));
答案 0 :(得分:0)
您配置了与每个/admin*
网址匹配的防火墙,但这并不意味着每个网址都需要身份验证。你可以成为anonymous user,这没关系。如果你想告诉silex“用户需要在这里允许ROLE_ADMIN
”,你需要添加
$app['security.access_rules'] = array(
array('^/admin', 'ROLE_ADMIN'),
);