我想创建自定义用户检查程序以验证针对上次接受的eula的登录操作。 “ 想法很简单,会有很多版本的eula和用户不能登录,直到他接受最新的eula。
情景是:
我发现了这个: https://groups.google.com/forum/#!msg/symfony2/D0V0bFks9S0/Qg9mrbpfB3IJ
但遗憾的是,没有完整版的自定义用户检查程序。我该如何实现剩下的呢?
答案 0 :(得分:8)
答案其实很明显。 在您的自定义捆绑包中:
config.yml
parameters:
security.user_checker.class: Acme\Bundle\UserBundle\Security\UserChecker
Userchecker:
class UserChecker extends BaseUserChecker
{
/**
* {@inheritdoc}
*/
public function checkPreAuth(UserInterface $user)
{
//do your custom preauth stuff here
parent::checkPreAuth($user);
}
}
答案 1 :(得分:6)
您可以在捆绑包中重新定义Symfony的用户检查服务(security.user_checker
):
# services.yml
security.user_checker:
class: MyBundle\Checker\UserChecker
arguments: [ "@some.service", "%some.param%" ]
然后扩展Symfony的UserChecker:
# UserChecker.php
use Symfony\Component\Security\Core\User\UserChecker as BaseUserChecker;
class UserChecker extends BaseUserChecker
{
public function checkPreAuth(UserInterface $user)
{
parent::checkPreAuth($user);
// your stuff
}
public function checkPostAuth(UserInterface $user)
{
parent::checkPostAuth($user);
// your stuff
}
}
在身份验证过程中security.user_checker
调用\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider::authenticate()
服务
答案 2 :(得分:0)
为什么不将事件监听器附加到kernel.request
事件并观察当前登录用户是否已接受最新的EULA?
要获得当前用户,您可以使用以下内容:
$securityContext = $this->container->get('security.context');
if (!$securityContext) {
return;
}
$user = $securityContext->getToken()->getUser();