Silex/Symfony安全防火墙访问安全区域外的用户令牌


Silex/Symfony Security Firewall Access user token outside the secured area

我使用Silex和SecurityProvider,我的防火墙:

$app->register(new Silex'Provider'SecurityServiceProvider(), array(
  'security.firewalls' => array(
    'user' => array(
      'pattern' => '^/user/',
      'form' => array(
        'login_path' => '/connexion',
        'check_path' => '/user/login_check',
        'default_target_path' => 'homepage_user'
        ),
      'logout' => array('logout_path' => '/user/deconnexion')
      ...
      )
    )
  ));

它有效!但我没有找到任何方法来访问模板中的用户对象,symfony synthax不起作用:

{{ app.user }}

所以我在Twig中添加了一个新的全局:

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
  $token = $app['security']->getToken();
  $user = ($token === null) ? null : $token->getUser();
  $twig->addGlobal('user', $user);
  return $twig;
}));

它可以工作,但不能在安全区域之外:$token为空

我的问题很简单:如何访问安全区域之外的用户?

谢谢

编辑:我试图添加一个匿名=true的防火墙,如下所示:

$app->register(new Silex'Provider'SecurityServiceProvider(), array(
  'security.firewalls' => array(
    'user' => array(
      'pattern' => '^/user/',
      'form' => array(
        'login_path' => '/connexion',
        'check_path' => '/user/login_check',
        'default_target_path' => 'homepage_user'
        ),
      'logout' => array('logout_path' => '/user/deconnexion'),
      ...
      ),
    'unsecured' => array(
      'anonymous' => true
      )
    )
  ));

但它不起作用,在安全区域之外,当用户登录时,令牌是"匿名"的。

但是,您需要做的是将该页面也置于防火墙之下。更改防火墙设置,使/成为防火墙,并添加ACL,使匿名者也可以输入/。然后你就可以拥有用户数据了。

在加载头数据的地方,检查用户是否经过身份验证,因为这是主要的isGranted('IS_AUTHENTICATED_REMEMBERED'),根据结果,您将包括不同的模板文件。

用户信息仅在安全区域可用,要想访问这些区域之外的信息,您必须允许匿名用户,如文档中所述:

$app['security.firewalls'] = array(
'unsecured' => array(
    'anonymous' => true,
    // ...
),