Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在非安全(匿名)路由上显示经过身份验证的用户_Php_Authentication_Symfony_Twig_Silex - Fatal编程技术网

Php 在非安全(匿名)路由上显示经过身份验证的用户

Php 在非安全(匿名)路由上显示经过身份验证的用户,php,authentication,symfony,twig,silex,Php,Authentication,Symfony,Twig,Silex,我使用PHP和Silex构建了一个web应用程序,并通过SecurityServiceProvider实现了基本身份验证,如下所示: $app->register(new Silex\Provider\SecurityServiceProvider(), array( 'security.firewalls' => array( 'private' => array( 'remember_me' => array(

我使用PHP和Silex构建了一个web应用程序,并通过
SecurityServiceProvider
实现了基本身份验证,如下所示:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'private' => array(
            'remember_me' => array(
                'key' => $config['secret_key'],
                'lifetime' => $config['remember_me_duration'],
            ),
            'pattern' => '^/admin',
            'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'),
            'logout' => array('logout_path' => '/admin/logout'),
            'users' => $app->share(function () use ($app) {
                // ...
            }),
        ),
        'public' => array(
            'pattern' => '^/$',
            'anonymous' => true,
        ),
        'login' => array(
            'pattern' => '^/login$',
            'anonymous' => true,
        ),
    ),
));
您可以看到
/admin
路径是安全的,在那里我可以使用
$app['security']->getToken()->getUser()
获取经过身份验证的实际用户,并显示类似于以$username身份登录的内容,但如果我在
/login
/
路由上执行此操作,则即使我已通过身份验证,用户也将始终是
匿名的。

如果有经过身份验证的用户,我如何获取
/
/login
路由上的
anon.
字符串,以便显示如下消息:以$username身份登录


我还尝试在细枝模板中使用
is\u grated('is\u AUTHENTICATED\u FULLY')
函数来检查用户是否经过身份验证,但在
/login
/code>上,它返回false(即使我经过身份验证)由于匿名用户优先于经过身份验证的用户,因此此处不成功。

所有内容都必须在同一防火墙下,您必须使用访问控制。

所有内容都必须在同一防火墙下,您必须使用访问控制。

为了帮助其他人,我解决了以下问题。 Silex不使用
访问控制
,而是使用
访问规则
(dammit)

正如帕齐(+1ed)所建议的,我将所有东西都放在一个防火墙下,并使用访问规则:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'main' => array(
            'remember_me' => array(
                'key' => $config['secret_key'],
                'lifetime' => $config['remember_me_duration'],
            ),
            'pattern' => '^/',
            'anonymous' => true,
            'form' => array(
                'login_path' => '/login',
                'check_path' => '/admin/login_check',
            ),
            'logout' => array('logout_path' => '/admin/logout'),
            'users' => $app->share(function () use ($app) {
                // ...
            }),
        ),
    ),
    'security.access_rules' => array(array('^/admin/files', 'ROLE_ADMIN'),
    ),
));

为了帮助其他人,我解决了以下问题。 Silex不使用
访问控制
,而是使用
访问规则
(dammit)

正如帕齐(+1ed)所建议的,我将所有东西都放在一个防火墙下,并使用访问规则:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'main' => array(
            'remember_me' => array(
                'key' => $config['secret_key'],
                'lifetime' => $config['remember_me_duration'],
            ),
            'pattern' => '^/',
            'anonymous' => true,
            'form' => array(
                'login_path' => '/login',
                'check_path' => '/admin/login_check',
            ),
            'logout' => array('logout_path' => '/admin/logout'),
            'users' => $app->share(function () use ($app) {
                // ...
            }),
        ),
    ),
    'security.access_rules' => array(array('^/admin/files', 'ROLE_ADMIN'),
    ),
));
@保罗 我更愿意添加评论,但我还不能这样做,因此作为回答:

看起来像是要出去

'pattern' => '^/admin'
您已打开对/admin/login\u检查的匿名访问的防火墙模式中的字符串,这是不对的

我的建议是把它收回去,把它拿走

'anonymous' => 'true'
来自防火墙的线路。应与此相同,但更安全。

@Paul 我更愿意添加评论,但我还不能这样做,因此作为回答:

看起来像是要出去

'pattern' => '^/admin'
您已打开对/admin/login\u检查的匿名访问的防火墙模式中的字符串,这是不对的

我的建议是把它收回去,把它拿走

'anonymous' => 'true'

来自防火墙的线路。应该可以同样工作,但会更安全。

请提供一个示例。我会(重新)尝试这样做,但我以前使用过access\u control,但没有成功。您可以提供一个示例吗?我会(重新)试着去做,但我以前用过访问控制,但没有成功。谢谢!这正是我需要的。谢谢!这正是我需要的。