我在Twig中手动实现了一个登录表单,我使用的是Symfony 3.4提供的默认身份验证(基于用户名和密码) . 用户存储在数据库中,因此我有一个扩展AdvancedUserInterface的实体 . 我既不使用FOSUserBundle也不使用表单构建器 . 只是一个简单的表格 . 它确实有效 .
问题是我想在登录过程中集成Google reCAPTCHA . 我知道如何检查验证码是否有效并实现了自定义AuthenticationListener(让我们称之为MyAuthenticationListener) .
我知道Symfony使用UsernamePasswordFormAuthenticationListener作为其默认侦听器 . 问题是我找不到将已使用的侦听器更改为已实现的方法 .
似乎在Symfony2中,它就像在config.yml中添加以下行一样简单:
parameters:
security.authentication.listener.form.class:
MyBundle\EventListener\MyAuthenticationListener
但是,我找不到Symfony3的方法 . 有什么建议?我也尝试为Symfony3找到一个特定的包,但实际上我找不到任何与Symfony Security正确集成的东西,允许我在登录表单中使用recaptcha .
谢谢
1 回答
您的问题可以在这里得到解答:
https://stackoverflow.com/a/50800993/7408561
该解决方案基于 SecurityEvents::INTERACTIVE_LOGIN 触发的自定义侦听器 . 在验证凭据之后但在重定向到security.yml中定义的 default_target_path 之前触发该事件 . 在此位置,您可以通过使用相应的密码调用google recaptcha api来验证请求参数 g-recaptcha-response .
如果验证失败,您可以抛出异常,然后您将被重定向到登录页面 .