【发布时间】:2015-03-28 22:12:09
【问题描述】:
如果客户的 IP 地址已被禁止,我想禁止访问 /login 和 /register。
被禁IP的(黑)名单存储在数据库中。
我该如何解决这个问题?
【问题讨论】:
标签: symfony fosuserbundle access-control
如果客户的 IP 地址已被禁止,我想禁止访问 /login 和 /register。
被禁IP的(黑)名单存储在数据库中。
我该如何解决这个问题?
【问题讨论】:
标签: symfony fosuserbundle access-control
从 symfony 2.4 开始,您可以在配置文件中使用 Expression Language Component。
现在实现简单的 IP 检查很容易:
getBannedIPs())创建服务(即 access_manager)# app/config/security.yml
security:
# ...
access_control:
- path: ^/(login|register)$
allow_if: "request.getClientIp() not in @=service('access_manager').getBannedIPs()"
【讨论】:
kernel.request 侦听器并将 flashmessage 添加到会话 flashbag ... 或只是对三元运算符和添加 flashmessage 并始终返回 true 的条件有点棘手....( request.getClientIp() not in @=service('access_manager').getBannedIPs() ) ? ( @=service('session').getFlashBag().add('warning', 'You have been banned.') != false ) : false。明白了吗?
Unexpected character "@"
您可以在注册控制器上订阅事件。
报名请订阅REGISTRATION_INITIALIZE活动。
这是controller events 的文档。
第二种解决方案是override login and register controller methods,但您必须复制登录/注册操作的所有代码。
【讨论】:
access_control 下的表达式语言组件即可。看我的回答:)