Kam*_*ari 9 authentication eula symfony doctrine-orm
我想创建自定义用户检查器以验证针对上次接受的eula的登录操作.'想法很简单,会有很多版本的eula和用户无法登录,直到他接受最新的eula.
场景是:
我找到了这个:https: //groups.google.com/forum/#!msg/symfony2/D0V0bFks9S0/Qg9mrbpfB3IJ
但遗憾的是,没有完整版的自定义用户检查程序.我该如何实现剩下的呢?
答案其实很明显.在您的自定义包中:
config.yml
parameters:
security.user_checker.class: Acme\Bundle\UserBundle\Security\UserChecker
Run Code Online (Sandbox Code Playgroud)
Userchecker:
class UserChecker extends BaseUserChecker
{
/**
* {@inheritdoc}
*/
public function checkPreAuth(UserInterface $user)
{
//do your custom preauth stuff here
parent::checkPreAuth($user);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以security.user_checker在捆绑包中重新定义Symfony的用户检查程序服务():
# services.yml
security.user_checker:
class: MyBundle\Checker\UserChecker
arguments: [ "@some.service", "%some.param%" ]
Run Code Online (Sandbox Code Playgroud)
然后扩展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
}
}
Run Code Online (Sandbox Code Playgroud)
在身份验证过程中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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3242 次 |
| 最近记录: |