1

im using SonataAdminBundle to develop my application with Symfony2. For the user login im trying to add google authentication. I configured HWIOAuthBundle as their documentation. everything smoothly configured and running. after google authentication prompt, it redirects to the following URL

http://mydomain.com/login/check-google?code=4/i38GBohe0J5q8PLQPdDjOvqVc_EC.4udVR17DB98cOl05ti8ZT3a9L-sEhAI 

with this URL, there is no any action assign with it so its giving error,

Unable to find the controller for path "/login/check-google". Maybe you forgot to add the matching route in your routing configuration? 

im using FOSUserBundle.

This is my 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
4

1 回答 1

1

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

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

RegEx ".*" = "0 到无限次 [greedy] 任何字符(换行符除外)"

编辑防火墙的模式以匹配您想让他们负责的路由,考虑到如果模式与路由匹配,则不会检查以下防火墙。

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

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

于 2013-10-29T06:20:46.970 回答