我想创建自定义的用户检查验证与去年接受EULA登录操作。 “想法很简单,会有EULA和用户无法登录,直到他接受了最新的EULA的多个版本。
方案是:
- 用户创建新帐号,并接受EULA。
- 尤拉得到更新
- 用户尝试登录,但他没有接受最新的EULA
- 用户得到相同的登录表单,但附加字段“接受最新最终用户许可协议”
- 用户登录和系统信息插入:当前日期和时间,用户ID,伊拉ID来跟踪最终用户许可协议的认可。
我发现这一点: https://groups.google.com/forum/#!msg/symfony2/D0V0bFks9S0/Qg9mrbpfB3IJ
但不幸的是有自定义的用户检查的不完整版本。 如何实现它的休息吗?
其实答案是很明显的。 在您的自定义包:
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);
}
}
你可以重新定义的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()
身份验证过程中
为什么事件监听器不重视kernel.request
事件,看如果当前登录的用户已经接受了最新的EULA?
为了让你可以使用类似这样的当前用户:
$securityContext = $this->container->get('security.context');
if (!$securityContext) {
return;
}
$user = $securityContext->getToken()->getUser();