我正在使用SonataAdminBundle使用Symfony2开发我的应用程序。对于用户登录即时尝试添加谷歌身份验证。我将HWIOAuthBundle配置为他们的文档。一切顺利配置和运行。在google身份验证提示后,它会重定向到以下网址
http://mydomain.com/login/check-google?code=4/i38GBohe0J5q8PLQPdDjOvqVc_EC.4udVR17DB98cOl05ti8ZT3a9L-sEhAI
使用此URL,没有任何操作分配,因此它给出错误,
Unable to find the controller for path "/login/check-google". Maybe you forgot to add the matching route in your routing configuration?
我正在使用FOSUserBundle。
这是我的config.yml,
hwi_oauth:
# configuration of oauth resource owners to use
resource_owners:
google:
type: google
client_id: xxxxxx.apps.googleusercontent.com
client_secret: xxxxxxxxxxx
scope: "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"
options:
access_type: online
# name of the firewall the oauth bundle is active in
firewall_name: secured_area
# optional FOSUserBundle integration
fosub:
# try 30 times to check if a username is available (foo, foo1, foo2 etc)
username_iterations: 30
# mapping between resource owners (see below) and properties
properties:
google: googleId
# if you want to use 'connect' and do not use the FOSUB integration, configure these separately
connect: ~
# optional HTTP Client configuration
http_client:
timeout: 5
verify_peer: true
ignore_errors: true
max_redirects: 5
Security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_manager
firewalls:
main:
pattern: .*
form-login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null
default_target_path: /admin/dashboard
logout:
path: /admin/logout
target: /login
anonymous: true
secured_area:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: /connect
check_path: /login/login_check
anonymous: true
oauth:
resource_owners:
google: "/login/check-google"
login_path: /connect
failure_path: /connect
# FOSUB integration
oauth_user_provider:
service: hwi_oauth.user.provider.fosub_bridge
access_control:
# The WDT has to be allowed to anonymous users to avoid requiring the login with the AJAX request
- { path: ^/wdt/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profiler/, role: IS_AUTHENTICATED_ANONYMOUSLY }
# AsseticBundle paths used when using the controller for assets
- { path: ^/js/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/css/, role: IS_AUTHENTICATED_ANONYMOUSLY }
# URL of FOSUserBundle which need to be available to anonymous users
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } # for the case of a failed login
的routing.yml
hwi_oauth_security:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix: /connect
hwi_oauth_connect:
resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
prefix: /connect
hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix: /connect
google_login:
pattern: /login/check-google
答案 0 :(得分:1)
我在代码中看到错误的第一件事是在Security.yml:
您的main
防火墙与所有路由匹配
RegEx“。*”=“0到无限次[贪心]任何角色(换行除外)”
编辑防火墙的模式以匹配您要对其负责的路由,同时考虑到如果模式与路由匹配,则不会检查防火墙。
firewalls:
secured_area:
pattern: ^/secured
main:
pattern: ^/
看看会发生什么,如果您还有其他错误,我会相应地编辑我的回复。