我使用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
)
)
));
但是在安全区域之外它不起作用,当用户被记录时,令牌是“匿名”。
答案 0 :(得分:1)
但是你需要做的是将该页面放在防火墙下面。 更改防火墙设置,以便/是防火墙,并添加ACL,以便匿名也可以输入到/。然后你可以拥有用户数据。
如果您在标题数据中加载,则会检查用户是否经过身份验证,因为这是主要内容isGranted('IS_AUTHENTICATED_REMEMBERED')
,并且根据结果,您将包含不同的模板文件。
答案 1 :(得分:0)
用户信息仅在安全区域可用,要在这些区域之外访问,您必须允许匿名用户described in the documentation:
$app['security.firewalls'] = array(
'unsecured' => array(
'anonymous' => true,
// ...
),