根据接受EULA Symfony2的自定义用户检查(Symfony2 custom user che

2019-06-25 14:55发布

我想创建自定义的用户检查验证与去年接受EULA登录操作。 “想法很简单,会有EULA和用户无法登录,直到他接受了最新的EULA的多个版本。

方案是:

  1. 用户创建新帐号,并接受EULA。
  2. 尤拉得到更新
  3. 用户尝试登录,但他没有接受最新的EULA
  4. 用户得到相同的登录表单,但附加字段“接受最新最终用户许可协议”
  5. 用户登录和系统信息插入:当前日期和时间,用户ID,伊拉ID来跟踪最终用户许可协议的认可。

我发现这一点: https://groups.google.com/forum/#!msg/symfony2/D0V0bFks9S0/Qg9mrbpfB3IJ

但不幸的是有自定义的用户检查的不完整版本。 如何实现它的休息吗?

Answer 1:

其实答案是很明显的。 在您的自定义包:

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);
    }
}


Answer 2:

你可以重新定义的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()身份验证过程中



Answer 3:

为什么事件监听器不重视kernel.request事件,看如果当前登录的用户已经接受了最新的EULA?

为了让你可以使用类似这样的当前用户:

$securityContext = $this->container->get('security.context');
if (!$securityContext) {
    return;
}

$user = $securityContext->getToken()->getUser();


文章来源: Symfony2 custom user checker based on accepted eula