Silex安全访问请求外部

时间:2016-02-11 13:38:52

标签: symfony security silex

我正在尝试在请求之外访问我的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->引导();

我这样想我可以在请求之外访问令牌,但它无效。我做错了什么或者我没有得到正确的文件?

1 个答案:

答案 0 :(得分:0)

$app->run();事件KernelEvents::REQUEST中设置了安全令牌。

如果你想在基本代码之前添加KernelEvents::REQUEST事件监听器或中间件。

$app->before(function($event, $app) {
    $request = $event->getRequest();
    $token = $app['security']->getToken();

    // your code here
})

http://silex.sensiolabs.org/doc/middlewares.html