我有一个包含公共和管理区域的Symfony 3.4项目。
当匿名用户尝试访问以/admin
开头的页面时,FOSUserBundle会自动重定向到登录页面。
当我的项目使用 HTTP 协议时一切正常,但是现在,该项目完全在 HTTPS 下。
当我尝试访问https://myproject/admin
时遇到问题
->它在http://myproject/login
而不是HTTPS上重定向(即使所有URL在HTTPS中自动重定向),我的浏览器也出现此错误:ERR_CONNECTION_REFUSED
如果我直接访问https://myproject/login
->可以,但是登录后(重定向到/admin
)的重定向也是在HTTP中完成的(并且我再次遇到相同的ERR_CONNECTION_REFUSED
错误)。
身份验证有效,因为如果我访问HTTPS中的管理区域,就可以很好地登录。
当我注销时也会发生->它重定向到项目的主页,但使用HTTP而不是HTTPS。
似乎FOSUserBundle管理的每个重定向都是在HTTP中完成的。
因此,我检查了Symfony documentation以对特定URL强制使用HTTPS。我尝试了这个:
// security.yml
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- { path: ^/admin, roles: ROLE_USER, requires_channel: https }
但是,当我访问/admin
时,没有更多重定向到登录页面,并且现在出现此错误:ERR_TOO_MANY_REDIRECTS
所以,我现在不知道该怎么办...
security.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/login$
anonymous: ~
main:
anonymous: true
pattern: ^/
form_login:
provider: fos_userbundle
login_path: /login
default_target_path: /admin # redirect after login
# csrf token options
csrf_parameter: _csrf_token
csrf_token_id: authenticate
csrf_token_generator: security.csrf.token_manager
logout_on_user_change: true
logout:
path: /logout
target: /
remember_me:
secret: '%secret%'
lifetime: 604800 # 1 week in seconds
path: /
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_USER }