1

提供されたFacebookログインボタンを使用してFacebookログインが発生するたびに新しいユーザーが作成され、ログインできるように、両方のバンドルを連携させようとしています。

スタックオーバーフローに関する他の質問に基づいて多くのことを試しましたが、それでも機能させることができません。これが私のコードです(私が試したことのいくつかをコメントに入れました;基本的にそれらとの可能な組み合わせをそれぞれ試しました):

Config.yml

fos_facebook:
  file:   %kernel.root_dir%/../vendor/facebook/src/base_facebook.php
  alias:  facebook
  app_id: FOO
  secret: BAR
  cookie: true
  permissions: [email, user_birthday]

fos_user:
    db_driver: orm
    firewall_name: public
    user_class: Not\NotBundle\Entity\User

Routing.yml

# fos_user_security:
#     resource: "@FOSUserBundle/Resources/config/routing/security.xml"

_security_check:
    pattern:  /login_check

_security_logout:
    pattern:  /logout

Security.yml

security:
factories:
    - "%kernel.root_dir%/../vendor/bundles/FOS/FacebookBundle/Resources/config/security_factories.xml"

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    # chain_provider:
    #     providers: [fos_userbundle, my_fos_facebook_provider]
    # fos_userbundle:
    #     id: fos_user.user_manager
    my_fos_facebook_provider:
        id: my.facebook.user

encoders:
    "FOS\UserBundle\Model\UserInterface": sha512

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    public:
        pattern:   ^/.*
        fos_facebook:
            app_url: "http://apps.facebook.com/FOO/"
            server_url: "http://not.not/facebookApp/"
            login_path: ^/login$
            check_path: ^/login_check$
            default_target_path: /
            provider: my_fos_facebook_provider
        # form_login:
        #     login_path: /login
        #     check_path: /login_check
        #     provider: fos_userbundle
        anonymous: true
        logout:
            handlers: ["fos_facebook.logout_handler"]

Services.yml

parameters:
    #my_facebook_user.class: Not\NotBundle\Security\User\Provider\FacebookProvider

services:
    my.facebook.user:
        class: Not\NotBundle\Security\User\Provider\FacebookProvider
        arguments:
            facebook: "@fos_facebook.api"
            userManager: "@fos_user.user_manager"
            # userManager: "@my.facebook.user" # <-- Tried this as well but gives: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 523800 bytes) in /Foo/vendor/symfony/src/Symfony/Component/DependencyInjection/Compiler/ServiceReferenceGraphEdge.php  
            validator: "@validator"
            container: "@service_container"

基本的に、この構成はFOSFacebookBundleドキュメントに最も近いものです。現時点では、エラーが発生しています。

パス「/login_check」のコントローラーが見つかりません。ルーティング構成に一致するルートを追加するのを忘れたのではないでしょうか。

どんな助けでも大歓迎です!

4

2 に答える 2

1

チェックパスとログインパスをルートに変更すると、問題が解決しました。

security.yml

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    public:
        pattern:   ^/.*
        fos_facebook:
            app_url: "http://apps.facebook.com/Foo/"
            server_url: "http://localhost/facebookApp/"
            login_path: NotNotBundle_homepage
            check_path: _security_check
            default_target_path: /
        anonymous: true
        logout:
            handlers: ["fos_facebook.logout_handler"]
于 2012-06-06T08:02:24.217 に答える
1

check_pathforfos_facebookform_login認証プロバイダーは異なる必要があります。

于 2012-06-02T16:53:52.880 に答える