【问题标题】:Accessing app.user in unsecured area, silex在不安全区域访问 app.user,silex
【发布时间】:2014-02-21 17:57:39
【问题描述】:

我有这个防火墙配置:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
     'admin' => array(
            'pattern' => '^/admin',
            'form' => array(
                'login_path' => '/#login',
                'check_path' => '/admin/login_check',
            ),
            'logout' => array(
                'logout_path' => '/admin/logout',
            )
        ),
    'unsecured' => array(
            'anonymous' => true,
            'pattern' => '^.*$',
        ),
    ));

还有这个用于security.rules:

$app['security.access_rules'] = array(
    array('^/admin', 'ROLE_ADMIN'),
    array('.*', 'IS_AUTHENTICATED_ANONYMOUSLY'),
);

我看到了这个答案:Silex/Symfony Security Firewall Access user token outside the secured area 但问题是,我无法访问“/”页面中的 app.user,并且 is_granted(在 twig 中)总是对任何输入返回 false。

我不知道那个答案中提到的 ACL 是不是别的东西(除了 access_rules)还是我做错了什么。

【问题讨论】:

    标签: symfony silex


    【解决方案1】:

    我相信用户(令牌)只能在登录它的防火墙内访问。因此,只要您在您网站的 /admin 部分内,您就可以访问 app.user,但不能在“不安全的”防火墙。

    要获得您正在寻找的行为,您需要拥有一个具有^/ 模式的整体/站点范围防火墙,然后使用访问规则来限制对/admin 的访问。

    $app->register(new Silex\Provider\SecurityServiceProvider(), array(
        'main' => array(
            'pattern' => '^/',
            'anonymous' => true,
            'form' => array(
                'login_path' => '/#login',
                'check_path' => '/admin/login_check',
            ),
            'logout' => array(
                'logout_path' => '/admin/logout',
            )
        ),
    ));
    
    $app['security.access_rules'] = array(
        array('^/admin', 'ROLE_ADMIN'),
        array('^/', 'IS_AUTHENTICATED_ANONYMOUSLY'),
    );
    

    因此,您网站的全新用户将立即通过匿名身份验证,直到他们使用允许他们访问 /admin 的角色登录。

    还值得注意的是,如果您要将登录表单放在管理区域内,例如/admin/login。他们需要为登录 URL 添加匿名访问规则。

    希望这会有所帮助!

    【讨论】:

    • 谢谢,但它总是强制用户登录。
    • 好的,你很可能需要添加'anonymous' => true,我已经编辑了我的答案。让我知道这是否更适合您。
    • 我还切换了 access_rules 的顺序,因为我相信它与第一个匹配。
    • 谢谢!现在一切正常。
    • 没问题,很高兴我能帮上忙!
    猜你喜欢
    • 2012-07-27
    • 2018-08-20
    • 2019-11-28
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    相关资源
    最近更新 更多