Silex - 访问安全区域之外的用户
Silex - access to user outside a secured area
我在我的 Silex 网站上设置了一个安全区域。当用户连接时,我需要在 header 中显示用户名,如果用户未连接,我需要在登录表单中显示 link 。
但是当用户在不安全的页面上(在防火墙之外)时,app.user
未定义。
我试过 this 解决方案,但它不起作用。
这是我的安全配置:
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'account' => array(
'pattern' => '^/account',
'form' => array('login_path' => '/login', 'check_path' => '/account/login_check'),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
),
'unsecured' => array(
'anonymous' => true,
),
)
));
这里是我的 header 显示用户名的地方:
{% if app.user %}
{{ app.user.username }}<br />
<a href="{{ path('account') }}">Mon compte</a>
{% else %}
<a href="{{ path('login') }}">se connecter</a><br />
<a href="{{ path('signup') }}">créer un compte</a>
{% endif %}
您可以通过将 pattern
修改为 ^/
并允许匿名访问 'anonymous' => true
来将防火墙扩展到所有应用程序。应该安全的路径在 security.access_rules
中指定
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'account' => array(
'pattern' => '^/',
'form' => array('login_path' => '/login', 'check_path' => '/login_check'),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
'anonymous' => true,
)
)
));
$app['security.access_rules'] = array(
array('^/account', 'ROLE_USER', null)
);
用户方法 getRoles()
应该 return 角色 ROLE_USER
这意味着用户可以使用角色 ROLE_USER
.[=20 访问来自 security.access_rules
的所有路径=]
class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterface
{
...
public function getRoles()
{
return array(new \Symfony\Component\Security\Core\Role\Role('ROLE_USER'));
}
...
}
我在我的 Silex 网站上设置了一个安全区域。当用户连接时,我需要在 header 中显示用户名,如果用户未连接,我需要在登录表单中显示 link 。
但是当用户在不安全的页面上(在防火墙之外)时,app.user
未定义。
我试过 this 解决方案,但它不起作用。
这是我的安全配置:
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'account' => array(
'pattern' => '^/account',
'form' => array('login_path' => '/login', 'check_path' => '/account/login_check'),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
),
'unsecured' => array(
'anonymous' => true,
),
)
));
这里是我的 header 显示用户名的地方:
{% if app.user %}
{{ app.user.username }}<br />
<a href="{{ path('account') }}">Mon compte</a>
{% else %}
<a href="{{ path('login') }}">se connecter</a><br />
<a href="{{ path('signup') }}">créer un compte</a>
{% endif %}
您可以通过将 pattern
修改为 ^/
并允许匿名访问 'anonymous' => true
来将防火墙扩展到所有应用程序。应该安全的路径在 security.access_rules
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'account' => array(
'pattern' => '^/',
'form' => array('login_path' => '/login', 'check_path' => '/login_check'),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
'anonymous' => true,
)
)
));
$app['security.access_rules'] = array(
array('^/account', 'ROLE_USER', null)
);
用户方法 getRoles()
应该 return 角色 ROLE_USER
这意味着用户可以使用角色 ROLE_USER
.[=20 访问来自 security.access_rules
的所有路径=]
class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterface
{
...
public function getRoles()
{
return array(new \Symfony\Component\Security\Core\Role\Role('ROLE_USER'));
}
...
}