1

SonataAdminBundle を使用して、Symfony2 でアプリケーションを開発しています。ユーザーログインの場合、Google認証を追加しようとしています。ドキュメントとして HWIOAuthBundle を構成しました。すべてがスムーズに構成され、実行されています。Google認証プロンプトの後、次のURLにリダイレクトします

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

ルーティング.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 から無限回 [貪欲] 任意の文字 (改行を除く)"

パターンがルートに一致する場合、次のファイアウォールはチェックされないことを考慮して、ファイアウォールのパターンを編集して、それらに責任を持たせたいルートに一致させます。

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

何が起こるか見てください。さらにエラーがある場合は、それに応じて応答を編集します。

于 2013-10-29T06:20:46.970 に答える