Symfony2.1 - 尝试使用HWIOAuthBundle添加Google身份验证

时间:2013-10-29 05:31:36

标签: symfony fosuserbundle hwioauthbundle

我正在使用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

1 个答案:

答案 0 :(得分:1)

我在代码中看到错误的第一件事是在Security.yml:

您的main防火墙与所有路由匹配

  

RegEx“。*”=“0到无限次[贪心]任何角色(换行除外)”

编辑防火墙的模式以匹配您要对其负责的路由,同时考虑到如果模式与路由匹配,则不会检查防火墙。

firewalls:
    secured_area:
        pattern: ^/secured
    main:
        pattern: ^/

看看会发生什么,如果您还有其他错误,我会相应地编辑我的回复。