Silex框架 - 用户始终是匿名的

时间:2014-07-24 11:57:49

标签: php silex hhvm

我已经使用我的$ app注册了一个基于MySQL的UserProvider,如下所述: http://www.bubblecode.net/en/2012/08/28/mysql-authentication-in-silex-the-php-micro-framework/

到目前为止,我已将密码设置为成功使用sha1。

$app['security.encoder.digest'] = $app->share(function ($app) {
    // use the sha1 algorithm
    // don't base64 encode the password
    // use only 1 iteration
    return new MessageDigestPasswordEncoder('sha1', false, 1);
});

我的问题是:根据需要对用户进行身份验证或拒绝,并在成功进行身份验证时重定向到默认路由,但不保留登录。式。如果我然后返回我的/登录表单,并打印用户令牌,我得到:

AnonymousToken(user="anon.", authenticated=true, roles="")

无论我做什么。任何帮助将不胜感激:我尝试确保我的会话是在"之前"控制器:他们是。

$app['session']->start();

我应该提一下,我正在运行HHVM而不是" vanilla PHP"。它应该大致对应于PHP 5.5,其他一切似乎都有用。

提前感谢您的帮助。

编辑:它似乎是HHVM和正在使用的Silex版本的问题,我现在向Silex团队报告。使用php5-fpm,相同的代码可以正常工作。

1 个答案:

答案 0 :(得分:1)

该问题仅适用于在HHVM上使用时Silex的本机会话处理程序。

作为解决方法,我建议使用PdoSessionHandler。

$app['session.db_options'] = array(
    'db_table'      => 'session',
    'db_id_col'     => 'session_id',
    'db_data_col'   => 'session_value',
    'db_time_col'   => 'session_time',
);

$app['session.storage.handler'] = $app->share(function () use ($app) {
    return new PdoSessionHandler(
        $app['db']->getWrappedConnection(),
        $app['session.db_options'],
        $app['session.storage.options']
    );
});

完整的代码可在此处找到:http://silex.sensiolabs.org/doc/cookbook/session_storage.html