我有一个防火墙规则,它与注释一起只允许作为特定用户访问操作。
此外,我希望阻止任何登录,如果它不是来自某个网络。在搜索解决方案后,我在guide之后遇到了其他access_control规则。
问题在于,如果我通过IP规则限制我的登录页面。如果有人试图访问它,我总是会收到ERR_TOO_MANY_REDIRECTS
错误。我宁愿爱有一个" Page not Found"消息甚至没有让外界的人知道可以有任何登录。
如何使用Symfony执行此操作?
security.yml:
security:
...
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
default:
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
logout: true
anonymous: true
access_control:
- { path: ^/logout$, role: ROLE_ADMIN }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https, ips: [127.0.0.1, fe80::1, ::1]}
- { path: ^/login$, roles: ROLE_NO_ACCESS }
- { path: ^/admin, role: ROLE_ADMIN, requires_channel: https}
答案 0 :(得分:1)
如果我没有弄错,Symfony在这里所做的就是尝试将用户的角色与路径所需的角色相匹配。 如果它与其中一个角色不匹配,则会将用户发送到登录页面。
问题是,登录页面是用户刚刚来自的地方。因此,用户进入无限循环,因为他们的条件永远无法满足。
我建议将登录页面本身放在防火墙之外,只需将IP检查放在LOGIN页面的代码中,如果不满足,则转储到防火墙内的其他地方。