今天,我必须在基于silex的现有应用程序中工作,并且在安全性方面存在一些问题。
在应用中,某些区域不安全,某些区域是安全的。 在某些非安全区域中,我需要能够访问用户,当然,如果他已连接。 目标很简单:在非安全区域中,我需要为登录用户添加一些功能。
我阅读了Silex的有关安全性的文档,发现:https://silex.symfony.com/doc/2.0/providers/security.html#allowing-anonymous-users 在stackoverflow上,我还发现了有关同一问题的一些帖子: Silex - access to user outside a secured area或Silex/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应该可以满足我的需求。
谢谢