【发布时间】:2013-08-02 17:34:05
【问题描述】:
我不知道如何在Silex 中使用SecurityServiceProvider。我的配置是:
$app['security.firewalls'] = array(
'admin' => array(
'pattern' => '^/_admin/.+',
'form' => array('login_path' => '/_admin/', 'check_path' => '/_admin/login_check'),
'logout' => array('logout_path' => '/_admin/logout'),
'users' => array(
'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsR...'),
),
),
);
$app->register(new Silex\Provider\SecurityServiceProvider());
这只是抛出:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Identifier "security.authentication_providers" is not defined.'
根据文档,在某些情况下,当您想在处理请求之外访问安全功能时,您必须致电 $app->boot();,但这不是我的情况。
如果我在$app->register(...) 之前调用$app->boot();,它不会引发任何异常,但它可能根本不会启动,因为在生成登录表单时,Twig 会抛出:
Unable to generate a URL for the named route "_admin_login_check" as such route does not exist.
an issue a few months ago 可能有同样的问题,但它已关闭,所以我想现在应该修复它
【问题讨论】:
-
可能与您的问题无关,但您不符合两条黄金法则之一(它们在文档中说明):您的 login_path 必须在限制区域之外定义。你的在 /_admin/,你的限制区域在 /_admin/.+,所以你没有在外面定义它。
-
我不这么认为。表达式
/_admin/.+与/_admin/路径不匹配,因此/_admin/在禁区外。