我使用 Symfony Standard 2.0.0BETA1 并尝试配置与 this book chapter 完全相同的 http_basic 身份验证
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
providers:
main:
users:
foo: { password: testing, roles: ROLE_USER }
firewalls:
main:
pattern: /.*
http_basic: true
logout: true
access_control:
- { path: /.*, role: ROLE_USER }
问题是当我尝试打开一个页面并提交用户名“foo”和密码“testing”时,它只是循环并无限地询问我的凭据或显示错误页面。
重现问题的步骤:
预期行为是查看主页,但显示凭据提示。
有谁知道为什么会发生这种情况以及如何解决?
最佳答案
在 Apache 下,PHP 作为 cgi/fastCGI 破坏了 http 基本身份验证
有一个解决方法:
app_dev.php
if( !isset($_SERVER['PHP_AUTH_USER']) )
{
if (isset($_SERVER['HTTP_AUTHORIZATION']) && (strlen($_SERVER['HTTP_AUTHORIZATION']) > 0))
{
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
if( strlen($_SERVER['PHP_AUTH_USER']) == 0 || strlen($_SERVER['PHP_AUTH_PW']) == 0 )
{
unset($_SERVER['PHP_AUTH_USER']);
unset($_SERVER['PHP_AUTH_PW']);
}
}
}
web/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
来源:symfony github issue
关于security - Symfony2 http_basic 安全性拒绝有效凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989201/