所以我有一个应用程序,它使用FOSUserbundle进行用户管理,使用HWIOAuthBundle进行OAuth身份验证,目前只有Facebook。
当我想通过FOSUserBundle模板提供的登录表单登录时,我一直收到此错误。
您必须使用安全防火墙配置中的form_login配置防火墙处理的检查路径。
但是当我使用facebook按钮通过登录登录时,我没有收到此错误。
以下是我的security.yml文件
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
# Roles being defined
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
in_memory:
memory: ~
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
secured_area:
anonymous: ~
logout: ~
oauth:
resource_owners:
facebook: "/login/check-facebook"
login_path: /login
use_forward: false
failure_path: /login
oauth_user_provider:
service: my.custom.user_provider
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: .*
provider: fos_userbundle
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
use_forward: false
failure_path: null
logout:
path: fos_user_security_logout
target: /
anonymous: true
http_basic:
realm: "Reviews"
# main:
# activate different ways to authenticate
# http_basic: ~
# http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate
# form_login: ~
# http://symfony.com/doc/current/cookbook/security/form_login_setup.html
# Access controls
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/view, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/create, role: ROLE_USER}
- { path: ^/edit, role: ROLE_USER}
- { path: ^/delete, role: ROLE_USER}
答案 0 :(得分:0)
我的猜测是您的表单登录被secured_area
防火墙捕获。
你有3个防火墙:
secured_area
匹配所有内容,默认模式为/*
dev
可能从未到过,因为secured_area
已匹配main
匹配所有(因为模式),但永远不会达到 Symfony将使用第一个匹配的防火墙进行身份验证,并且由于未为登录表单配置secured_area
,因此它不起作用。您可以合并两个防火墙(基本上将oauth
部分复制到main
,但单独的登录机制可能仍然会干扰。
如果两个登录都针对不同的部分(例如,用户的Facebook,以及只有管理员用户可以访问的后端的登录),您可以分配不同的模式并检查探查器栏(开发模式下屏幕底部的工具栏) )如果使用了正确的防火墙。
在任何情况下,我都会更改防火墙的顺序。您可以通过将dev
移动到顶部来确保处理/*
,并确保将最通用的防火墙(使用app
模式)移动到底部,以确保它捕获之前未由其他人处理的所有路由防火墙。