在使用Symfony 2.8.14的项目中,我使用非常基本的设置在Symfony中启用基本HTTP身份验证,如http://symfony.com/doc/2.8/security.html
中所述security.yml
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
providers:
in_memory:
memory:
users:
myuser: { password: mypassword, roles: 'ROLE_USER' }
firewalls:
default:
anonymous: ~
http_basic: ~
access_control:
- { path: ^/myroute, roles: ROLE_USER }
在本地服务器上访问/myroute
时,系统会提示我使用HTTP基本身份验证提示。但是,输入正确的凭据后,它会不断向我显示提示。
在远程服务器上输入正确的凭据后,将会有无限的“重定向”到具有401
状态代码的相同路由。
两台服务器都通过FastCGI运行带有PHP的Apache 2.4。还有其他线程建议添加
# Sets the HTTP_AUTHORIZATION header removed by apache
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
到/web/.htaccess
由于Apache通过FastCGI运行PHP的特定问题。但是,这已经合并到symfony/standard-edition
中(并且也存在于我的.htaccess
中)。
我不知道还有什么可以尝试。
答案 0 :(得分:4)
http://php.net/manual/en/features.http-auth.php上的其中一条说明建议添加:
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
这有帮助。看来.htaccess
的默认symfony/standard-edition
配置是不够的(至少在某些环境中)。
答案 1 :(得分:1)
尝试在防火墙下指定:
firewalls:
default:
pattern: ^/myroute
anonymous: false
provider: in_memory
希望这个帮助
答案 2 :(得分:0)
你必须这样做(转到新行)
providers:
in_memory:
memory:
users:
myuser:
{ password: mypassword, roles: 'ROLE_USER' }
或者您也可以像这样探索数组
providers:
in_memory:
memory:
users:
myuser:
password: mypassword
roles: 'ROLE_USER'
否则myuser被视为一个值为" {password:mypassword,roles:' ROLE_USER' }"