非安全区域>访问用户信息

时间:2019-06-03 13:15:10

标签: security silex

今天,我必须在基于silex的现有应用程序中工作,并且在安全性方面存在一些问题。

在应用中,某些区域不安全,某些区域是安全的。 在某些非安全区域中,我需要能够访问用户,当然,如果他已连接。 目标很简单:在非安全区域中,我需要为登录用户添加一些功能。

我阅读了Silex的有关安全性的文档,发现:https://silex.symfony.com/doc/2.0/providers/security.html#allowing-anonymous-users 在stackoverflow上,我还发现了有关同一问题的一些帖子: Silex - access to user outside a secured areaSilex/Symfony Security Firewall Access user token outside the secured area,但并不能帮助我找出为什么它不起作用。

这是我的防火墙配置:

$app['security.firewalls'] = array(
     'default' => array(
         'pattern' => '^/$',
         'anonymous'      => true,
     ),
    'login' => array(
        'pattern' => '^/(login$|_profiler)',
        'anonymous'      => true,
    ),
    'secured' => array(
        'pattern' => '^/personnalProgram/.*$',
        'form' => array(
            'login_path' => '/login',
            'check_path' => '/personnalProgram/login_check',
        ),
        'logout' => array(
            'logout_path' => '/logout',
            'invalidate_session' => true
        ),
        'remember_me' => array(
            'key'                => getenv("remember_me.key"),
            'secret'             => getenv("remember_me.key"),
            'always_remember_me' => true,
        ),
        'guard' => array(
            'authenticators' => array(
                'app.login_authenticator'
            )
        ),
        'users' => function () use ($app) {
            return new \App\Repository\UserRepository($app['db']);
        },
        'anonymous'      => false,
    ),
);

您已经看到,唯一受保护的区域是“ / personnalProgram” 我还有一个“基本控制器”,所有其他人都对其进行了扩展。

这里:

abstract class BaseController {

    /** @var Application  */
    protected $app;

    /** @var array */
    protected $parameters = [];

    /**
     * @return mixed
     */
    abstract protected function getTemplateName();

    /**
     * @return mixed
     */
    abstract protected function getRepositoryName();

    /**
     * BaseController constructor.
     *
     * @param Application $app
     */
    public function __construct(Application $app)
    {
        $this->app = $app;

        /** @var array $menu */
        $menu = $this->getAllRoutes();

        $this->parameters['menu'] = $menu;
    }

    /**
     * @return \Activo\App\Entity\User
     * @throws \Exception
     */
    protected function getUser()
    {
        $token = $this->app['security.token_storage']->getToken();

        if ($token === null || ($user = $token->getUser()) === null) {
            throw new \Exception("Could not get user");
        }

        return $user;
    } 

所以我自然地认为我可以访问所有控制器中的用户,并做了一些检查,但是...不。

我想知道在我的防火墙配置中是否有些奇怪,因为如果我参考silex文档,则添加匿名> true应该可以满足我的需求。

谢谢

0 个答案:

没有答案