在验证用户与 Symfony 4 和 FOSUserBundle 连接后重定向用户

Posted

技术标签:

【中文标题】在验证用户与 Symfony 4 和 FOSUserBundle 连接后重定向用户【英文标题】:Redirect user after verifying that he is connected with Symfony 4 and FOSUserBundle 【发布时间】:2020-03-21 15:10:45 【问题描述】:

世界你好! 我是一名 laravel 开发人员,但有一段时间我一直在从事 symfony 项目。 在我的工作中,我刚刚遇到了一个主要问题,即在检查用户是否登录后运行一段代码。 在 laravel 上,我可以使用提供者、中间件或基本控制器来做到这一点。但是在 Symfony 4 上我被阻止了。 我使用方法$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); 我希望每次我们检查我们可以运行这个方法:

if ($this->getUser()->getMetaValue('level') == "ADMIN") 
     $ip = file_get_contents("http://ipecho.net/plain");
     $record = $this->get('geoip2.reader')->city($ ip);
     $isoCode = $record->country->isoCode;
     if ($isoCode! = "USA") 
         return $this->render('backOffice/***_error.html.twig');
     

因此,每次连接管理员时,我们都会检查它是否从美国连接,否则会被要求使用 *** 来获得 IP 地址。 感谢您的关注。

【问题讨论】:

这可能是一个起点:symfony.com/doc/current/event_dispatcher/… 【参考方案1】:

@Yoshi 谢谢! 我找到了解决方案,但我知道这不是最好的,但目前它让我满意。我已经编辑了denyAccessUnlessGranted() 方法,并使用 echo 强制显示错误 我的解决方案是这样的:

    /**
     * Throws an exception unless the attributes are granted against the current authentication token and optionally
     * supplied subject.
     *
     * @throws AccessDeniedException
     *
     * @final
     */
    protected function denyAccessUnlessGranted($attributes, $subject = null, string $message = 'Access Denied.')
    
        if (!$this->isGranted($attributes, $subject)) 
            $exception = $this->createAccessDeniedException($message);
            $exception->setAttributes($attributes);
            $exception->setSubject($subject);

            throw $exception;
         
        if ($this->getUser()->getMetaValue('level') == "ADMIN") 
            $ip = file_get_contents("http://ipecho.net/plain");
            $record = $this->get('geoip2.reader')->city($ ip);
            $isoCode = $record->country->isoCode;
            if ($isoCode!= "USA") 
                echo $this->renderView('backOffice/***_error.html.twig');
                die();
             
        
    

【讨论】:

以上是关于在验证用户与 Symfony 4 和 FOSUserBundle 连接后重定向用户的主要内容,如果未能解决你的问题,请参考以下文章

Symfony PHPUnit 测试不验证用户

如何在 Symfony2 中制作高级 ACL?

以编程方式对用户进行身份验证以进行 PhpUnit 功能测试 - 不受 Doctrine 管理 - Symfony 4.3

Symfony2 自定义身份验证:用户登录但未通过身份验证

Symfony - 重定向后身份验证丢失

Symfony 4 Restful API 使用 JWT 和 facebook 登录