Silex / Symfony Security:如何对用户登录执行额外检查?

时间:2014-05-28 09:30:39

标签: php symfony login firewall silex

我正在与Silex Security合作,防火墙和安全设备以这种方式配置:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'admin' => array(
            'pattern' => '^/secured/',
            'form' => array(
                'login_path' => '/login',
                'check_path' => '/secured/login_check'
            ),
            'users' => $app->share(function() use ($app) {
                return new CustomUserProvider($app["db"]);
            }),
            'logout' => array('logout_path' => '/secured/logout'),
            'switch_user' => array('parameter' => '_cambiar_usuario', 'role' => 'ROLE_ALLOWED_TO_SWITCH')
        )
    )
));

一切正常,但现在我想对用户执行额外的检查,在这种情况下,我想检查用户电子邮件是否已经过验证(只是检查数据库字段是真还是假)对用户来说 - 密码检查。如果邮件验证尚未完成,我想使用自定义消息进行身份验证失败。

1 个答案:

答案 0 :(得分:3)

我自己解决了。我不得不扩展Symfony的UserChecker课程并覆盖checkPreAuth方法以添加额外的支票。

之后我用我的替换默认用户检查器:

$app->register(new SecurityServiceProvider(), array(
    'security.firewalls' => array(
         //my firewalls
    )
));

$app['security.user_checker'] = $app->share(function ($app) {
    return new CustomUserChecker();
});