Symfony3 onSecurityInteractiveLogin注销并设置flash

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony3 onSecurityInteractiveLogin注销并设置flash相关的知识,希望对你有一定的参考价值。

我将symfony2.2上的项目移植到symfony3.4。我有onSecurityInteractiveLogin事件的LoginListener。当用户登录时,我需要做一些检查。如果检查失败,则用户必须注销并显示一些Flash消息。下面的代码在symfony2中运行正常。在Symfony3中,所有工作都很好,除了flash消息,它没有显示,我认为会话清理。如何以登录表单显示flash消息?

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
    $user = $event->getAuthenticationToken()->getUser();

    if ($user instanceof UserInterface) {

        // Make some check based on user info in database...

        $check = true || false;

        // Logout user and set flash
        if(!$check){
            $request = $event->getRequest();
            $session = $this->container->get('session');
            $session->start();
            $session->getFlashBag()->add('error','message');
            $request->request->set('_target_path', '/logout');
        }
    }
}
答案

我认为使用自定义Authenticator class更好的解决方案。在构造函数中注入Session。您可以在checkCredentials()方法中进行检查,在此处将错误输入FlashBag并返回false,如果用户没有通过您的检查。

或者你可以使用你的自定义user checker

以上是关于Symfony3 onSecurityInteractiveLogin注销并设置flash的主要内容,如果未能解决你的问题,请参考以下文章

Symfony3 配置组件验证

Symfony3 找不到“GET /logout”的路由

Symfony3 + Select2 AJAX - 禁用选择验证

Symfony3 / Nelmio cors / fetch api — 400 错误请求

Symfony3.1 & Sonata Admin - 列表字段的模板被忽略

如何解决 Symfony3 中的 ServiceNotFoundException