已登录 Sonata 管理员,但控制器中的授权检查器 returns false
Logged into Sonata admin but authorization checker in controller returns false
我正在与 Symfony CMF
、Sonata Admin
、Sonata UserBundle
和 FOS UserBundle
合作。我可以登录到后端并管理站点的实体。但是在我的前端控制器中检查登录用户时...
if ( ! $this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
exit('not logged in');
}
... 'not logged in' 终止被触发。
我不确定我是否使用了正确的方法来检查用户是否已通过身份验证,或者我在配置 Sonata UserBundle
.
时是否遗漏了什么
更新(添加防火墙)
config.yml
# FOS User Bundle
fos_user:
db_driver: orm
firewall_name: main
user_class: Application\Sonata\UserBundle\Entity\User
group:
group_class: Sonata\UserBundle\Entity\BaseGroup
registration:
form:
type: application_sonata_user_registration
security.yml
security:
firewalls:
# -> custom firewall for the admin area of the URL
admin:
pattern: /admin(.*)
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null
logout:
path: /admin/logout
anonymous: true
# -> end custom configuration
# defaut login area for standard users
main:
pattern: .*
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null
logout: true
anonymous: true
你有两个安全系统,当你登录管理员时,你没有在主防火墙中进行身份验证,反之亦然。如果你想在一个会话中使用多个防火墙,你可以使用 context
选项 http://symfony.com/doc/current/reference/configuration/security.html#firewall-context
添加到每个防火墙:
context: main
我正在与 Symfony CMF
、Sonata Admin
、Sonata UserBundle
和 FOS UserBundle
合作。我可以登录到后端并管理站点的实体。但是在我的前端控制器中检查登录用户时...
if ( ! $this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
exit('not logged in');
}
... 'not logged in' 终止被触发。
我不确定我是否使用了正确的方法来检查用户是否已通过身份验证,或者我在配置 Sonata UserBundle
.
更新(添加防火墙)
config.yml
# FOS User Bundle
fos_user:
db_driver: orm
firewall_name: main
user_class: Application\Sonata\UserBundle\Entity\User
group:
group_class: Sonata\UserBundle\Entity\BaseGroup
registration:
form:
type: application_sonata_user_registration
security.yml
security:
firewalls:
# -> custom firewall for the admin area of the URL
admin:
pattern: /admin(.*)
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null
logout:
path: /admin/logout
anonymous: true
# -> end custom configuration
# defaut login area for standard users
main:
pattern: .*
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null
logout: true
anonymous: true
你有两个安全系统,当你登录管理员时,你没有在主防火墙中进行身份验证,反之亦然。如果你想在一个会话中使用多个防火墙,你可以使用 context
选项 http://symfony.com/doc/current/reference/configuration/security.html#firewall-context
添加到每个防火墙:
context: main