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

时间:2013-11-22 21:40:58

标签: php security symfony silex

我使用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为null

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

谢谢

编辑:我尝试使用anonymous = 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
      )
    )
  ));

但是在安全区域之外它不起作用,当用户被记录时,令牌是“匿名”。

2 个答案:

答案 0 :(得分:1)

但是你需要做的是将该页面放在防火墙下面。 更改防火墙设置,以便/是防火墙,并添加ACL,以便匿名也可以输入到/。然后你可以拥有用户数据。

如果您在标题数据中加载,则会检查用户是否经过身份验证,因为这是主要内容isGranted('IS_AUTHENTICATED_REMEMBERED'),并且根据结果,您将包含不同的模板文件。

答案 1 :(得分:0)

用户信息仅在安全区域可用,要在这些区域之外访问,您必须允许匿名用户described in the documentation

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

    // ...
),