silex如何正确配置多个防火墙?
How to configure multiple firewalls correctly in silex?
我正在开发一个项目,我希望有两个登录表单,一个用于系统的管理区域,另一个用于访问客户端,我配置了以下防火墙
'admin' => array(
'pattern' => '^/.*$',
'anonymous' => true,
'form' => array(
'login_path' => '/',
'check_path' => '/login_check',
'default_target_path' => '/dashboard',
'always_use_default_target_path' => true,
'username_parameter' => 'username',
'password_parameter' => 'password',
'csrf_parameter' => 'login_token',
'failure_path' => '/',
),
'logout' => array(
'logout_path' => '/logout',
'target' => '/'
),
'users' => $app->factory(function () use ($app) {
return new Lib\Provider\UserProvider($app);
})
),
'clients' => array(
'pattern' => '^/clients',
'anonymous' => true,
'form' => array(
'login_path' => '/clients/login',
'check_path' => '/clients/login_check',
'default_target_path' => '/clients/admin',
'always_use_default_target_path' => true,
'username_parameter' => 'username',
'password_parameter' => 'password',
'csrf_parameter' => 'login_token',
'failure_path' => '/clients',
),
'logout' => array(
'logout_path' => '/clients/logout',
'target' => '/clients/login'
),
'users' => $app->factory(function () use ($app) {
return new Lib\Provider\ClientProvider($app);
})
)
admin firewall 中的 'check_path' => '/login_check' 工作正常,但是当你想转到由 check_path 生成的 url 时客户端防火墙它标记以下错误
NotFoundHttpException in HttpKernel.php line 134:
Unable to find the controller for path "/clients/login_check". The route is wrongly configured.
我搜索了几个小时,我无法更正这个错误,非常感谢您帮助解决这个问题
谢谢
您的 "clients" 部分的 check_path 似乎不在防火墙后面。由于在定义多个防火墙时顺序很重要(第一个匹配模式获胜),我敢打赌您的 "admin" 防火墙模式已经捕获了所有 URL,因此“/clients”URL 被这个捕获"clients" 个中的一个。
也许尝试使用 "admin" 前缀临时重命名您的管理路由,相应地修改防火墙(使用捕获所有“/admin/...”的模式)并告诉我们它是否解决了您的问题,或者如果返回的错误发生了变化。
编辑:
或者只是改变你的两个防火墙的顺序,让客户的防火墙在管理员的之前匹配路由。
干杯。
我正在开发一个项目,我希望有两个登录表单,一个用于系统的管理区域,另一个用于访问客户端,我配置了以下防火墙
'admin' => array(
'pattern' => '^/.*$',
'anonymous' => true,
'form' => array(
'login_path' => '/',
'check_path' => '/login_check',
'default_target_path' => '/dashboard',
'always_use_default_target_path' => true,
'username_parameter' => 'username',
'password_parameter' => 'password',
'csrf_parameter' => 'login_token',
'failure_path' => '/',
),
'logout' => array(
'logout_path' => '/logout',
'target' => '/'
),
'users' => $app->factory(function () use ($app) {
return new Lib\Provider\UserProvider($app);
})
),
'clients' => array(
'pattern' => '^/clients',
'anonymous' => true,
'form' => array(
'login_path' => '/clients/login',
'check_path' => '/clients/login_check',
'default_target_path' => '/clients/admin',
'always_use_default_target_path' => true,
'username_parameter' => 'username',
'password_parameter' => 'password',
'csrf_parameter' => 'login_token',
'failure_path' => '/clients',
),
'logout' => array(
'logout_path' => '/clients/logout',
'target' => '/clients/login'
),
'users' => $app->factory(function () use ($app) {
return new Lib\Provider\ClientProvider($app);
})
)
admin firewall 中的 'check_path' => '/login_check' 工作正常,但是当你想转到由 check_path 生成的 url 时客户端防火墙它标记以下错误
NotFoundHttpException in HttpKernel.php line 134:
Unable to find the controller for path "/clients/login_check". The route is wrongly configured.
我搜索了几个小时,我无法更正这个错误,非常感谢您帮助解决这个问题
谢谢
您的 "clients" 部分的 check_path 似乎不在防火墙后面。由于在定义多个防火墙时顺序很重要(第一个匹配模式获胜),我敢打赌您的 "admin" 防火墙模式已经捕获了所有 URL,因此“/clients”URL 被这个捕获"clients" 个中的一个。
也许尝试使用 "admin" 前缀临时重命名您的管理路由,相应地修改防火墙(使用捕获所有“/admin/...”的模式)并告诉我们它是否解决了您的问题,或者如果返回的错误发生了变化。
编辑: 或者只是改变你的两个防火墙的顺序,让客户的防火墙在管理员的之前匹配路由。
干杯。