ben*_*oit 21 php symfony silex
我用登录机制构建了一个Silex项目.
我不是Symfony专家,我严格遵循这里的认证过程指南:http://silex.sensiolabs.org/doc/providers/security.html
...它在我的开发环境中运行良好
但是,当我在生产服务器上推送项目时,每次尝试登录我的Web应用程序时都会出现以下错误
[2012-12-18 16:35:33] CRITICAL: Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException:
A Token was not found in the SecurityContext. (uncaught exception) at
/my/app/path/vendor/symfony/security/Symfony/Component/Security/Http/Firewall/AccessListener.php line 53 [] []
Run Code Online (Sandbox Code Playgroud)
这意味着AccessListener.php中的以下代码
$this->context->getToken());
Run Code Online (Sandbox Code Playgroud)
抛出一个预感
鉴于相同的代码在我的开发环境中完美运行,我认为它与我的生产服务器配置有关.
我发现这个帖子http://groups.google.com/forum/#!msg/symfony-devs/jKphNy_0Q2Y/vYfkAuyjSHEJ建议将以下行添加到我的项目.htaccess
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
Run Code Online (Sandbox Code Playgroud)
没有结果.我仍然得到"在SecurityContext中找不到A令牌"异常.
有人有想法吗?
编辑
内容$app['security.firewalls']
如下
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'login' => array(
'pattern' => '^/login$'
),
'admin' => array(
'pattern' => '^/',
'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'),
'logout' => array('logout_path' => '/admin/logout'), // url to call for logging out
'users' => array(
'admin' => array('ROLE_ADMIN', 'SOMEPASSWORD'),
),
)
)
));
Run Code Online (Sandbox Code Playgroud)
这在本地计算机上有效但在生产环境中无效的最有可能的原因是 Apache 支持 .htaccess,而nginx 不会浪费 I/O 和 CPU 时间来解析此文件
如果您发布 .htaccess,我将向您展示如何将其转换为高性能的 nginx 可读配置。
编辑
Silex 甚至还有 nginx 的配置示例
http://silex.sensiolabs.org/doc/web_servers.html
归档时间: |
|
查看次数: |
3871 次 |
最近记录: |