0

我正在开发一个多租户应用程序,我需要完成一些规则来检查用户何时可以通过身份验证(我不是在谈论角色,尝试 make login 应该返回“无效的用户名或密码”)。

我的问题是:放置这些额外检查的最佳位置在哪里?

4

3 回答 3

1

我认为您最好的选择是阅读 FosUserBundle 中的用户相关类。我通过在UserManager.php中添加自定义方法进行了许多更改

FOS 调用许多链式方法,您可以浏览这些文件并根据需要进行更改

还要注意

UserListerner.php User.php

于 2013-01-31T00:56:54.323 回答
1

这取决于您打算执行的检查类型,但通常最好的方法是使用自定义安全投票器。

官方文档中有一个示例展示了如何实现 IP 黑名单: http ://symfony.com/doc/current/cookbook/security/voters.html

于 2013-03-04T17:24:26.927 回答
0

我认为这个问题很老,但仍然非常相关。答案帮助我走上了正确的道路(FOSUserBundle 2.0 和 Symfony 3.3) - 如果有人还在寻找,这里有更多详细信息 https://symfony.com/doc/master/bundles/FOSUserBundle/user_manager.html

这部分对我来说很关键:

FOS\UserBundle\Model\UserManagerInterface您可以通过定义服务实现并在配置中设置其 id来替换用户管理器的默认实现 。默认实现的 id 是 fos_user.user_manager.default

fos_user: # ... service: user_manager: custom_user_manager_id

您的自定义实现可以扩展FOS\UserBundle\Model\UserManager 以重用通用逻辑。

就我而言,我只是将整个FOS\UserBundle\Doctrine\UserManager(which extends FOS\UserBundle\Model\UserManager) 复制到 myAppBundle\Services作为起点。

我还必须从这里复制注射:vendor/friendsofsymfony/user-bundle/Resources/config/doctrine.xml

于 2017-12-17T15:33:29.520 回答