如何将 "Access denied" 重定向到 Silex 中的登录页面

How to redirect "Access denied" to login page in Silex

这是我的防火墙代码

$app['security.firewalls']=[
    'secured'=>[
        'pattern' => '/',
        'anonymous' => true,
        'http'=>true,
        'form' => array('login_path' => '/login', 'check_path' => '/secured/login_check'),
        'logout' => array('logout_path' => '/secured/logout', 'invalidate_session' => true),
        'users'=>$users
    ]
];
$app['security.access_rules']=[
    ["^/admin", "ROLE_ADMIN"]
];

当没有admin角色的用户访问管理页面时,如何将他们重定向到登录页面?

我在管理控制器代码中进行了没有访问规则的测试:

if($app['security.authorization_checker']->isGranted('ROLE_ADMIN')){
        // ...
        // ...
        // ...
    }
else return $app->redirect($app->url('login'));

但是当我使用这种方法时出现的问题是它会重定向到首页而不是上一页。如何让登录页面在成功登录检查后重定向到上一页而不是首页?

尝试将 always_use_default_target_pathuse_referer 参数添加到安全配置:

$app['security.firewalls']=[
    'secured'=>[
         ...
        'form' => array(
            'login_path' => '/login',
            'check_path' => '/secured/login_check',
            'always_use_default_target_path' => false,
            'use_referer' => true
        ),
         ...
    ]
];

为什么使用2个入口点登录? httpform?