我正在尝试在请求之外访问我的silex应用程序的用户令牌,以便根据登录用户管理包含。由于它无法正常工作,我将我的脚本分解为:
// .. I have registered the app and some other providers before this ...
// Register the firewall
$app->register(new Silex\Provider\SecurityServiceProvider());
$app->register(new Silex\Provider\RememberMeServiceProvider());
$app['security.firewalls'] = array(
'login' => array(
'pattern' => '^/login$',
),
'secured' => array(
'pattern' => '^.*$',
'security' => true,
'form' => array(
'login_path' => '/login',
'check_path' => '/login_check'
),
'logout' => array(
'logout_path' => '/logout',
'invalidate_session' => true
),
'users' => array(
// raw password is foo
'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='),
)
)
);
// Boot the application to access security features
$app->boot();
// Get the token
$token = $app['security']->getToken();
var_dump($token);
// ... Here comes the route definition ...
$app->run();
应用程序正在运行,当我没有登录时,令牌是NULL,什么是正确的。但是如果我已经登录,那么只要我在请求之外访问它,它也是NULL。如果我在请求中访问它,它就会被设置。 Silex文档说:
安全功能仅在引导应用程序后可用。因此,如果您想在处理请求之外使用它,请不要忘记先调用boot():
$ APP->引导();
我这样想我可以在请求之外访问令牌,但它无效。我做错了什么或者我没有得到正确的文件?
答案 0 :(得分:0)
$app->run();
事件KernelEvents::REQUEST
中设置了安全令牌。
如果你想在基本代码之前添加KernelEvents::REQUEST
事件监听器或中间件。
$app->before(function($event, $app) {
$request = $event->getRequest();
$token = $app['security']->getToken();
// your code here
})