3

2つの別々のログインページを作成する方法を理解しようとしています。ページのデフォルトのログインと.com、ルートなどの特定のユーザーのログインです/special

これは1つのSF2プロジェクトで簡単に可能ですか?

アップデート:

ファイアウォールに次の構成があります(fosubを使用しています)

providers:
    custom:
        id: ib.user_provider
    fos_userbundle:
        id: fos_user.user_manager
    my_fos_facebook_provider:
        id: my.facebook.user

firewalls:
    special:
        pattern: ^/special
        form_login:
            provider: fos_userbundle
            login_path: /special/login
            check_path: /special/login_check
            use_referer: false
            default_target_path: /special
            success_handler: ib.login_handler
            provider: custom
    main:
        pattern: ^/.*
        form_login:
            provider: fos_userbundle
            login_path: /login
            check_path: /login_check
            use_referer: false
            default_target_path: /
            provider: custom
        fos_facebook:
            always_use_default_target_path: true
            app_url: "http://apps.facebook.com/%facebook_app_id%/"
            server_url: "http://aw.com/aw/web/app_dev.php/"
            login_path: /login
            check_path: /login_check/facebook
            default_target_path: /checkFB
            success_handler: facebook_auth_success_handler
            provider: my_fos_facebook_provider
        logout:
            #handlers: ["fos_facebook.logout_handler"]
            target: /
        anonymous:    ~  

ib.login_handlerには、次のものがあります。

public function onAuthenticationSuccess(Request $request,TokenInterface $token)
{
    if ($this->security->isGranted('ROLE_CATEGORIZER'))
    {
        $response = new RedirectResponse($this->router->generate('MyCoBundle_mailAdmin_index'));
    }


    return $response;
}

この構成では、mydomain.com / specialにアクセスすると、次のエラーが発生します。Fehler:Umleitungsfehler(英語:エラー:リダイレクトエラー)

アップデート:

Chromeで取得:「GET / special/login」のルートが見つかりません

404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

このログインパス用の特別なルートはありません。私が達成したいのは、特別なユーザーがパス/特別なページにしかアクセスできないということです。

4

1 に答える 1

8

可能です。多くの保護ゾーン=>多くのファイアウォールを定義できます。

方法を知るために、このapp / config /security.yml構成を見てみましょう:

firewalls:

    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    special_area:
        pattern:  ^/special
        anonymous: ~
        form_login:
            check_path: /special/login_check
            login_path: /special/login
        logout:
            path:   /special/logout
            target: /

    general_area:
        pattern:  ^
        anonymous: ~
        form_login:
            check_path: /login_check
            login_path: /login
        logout:
            path:   /logout
            target: /


access_control:
    - { path: ^/_internal, role: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }

    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/special/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }

general_areaのパターンは他のすべてのパターンと一致するため、special_areaはgenereal_areaの定義する必要があることに注意してください。

バンドルrouting.ymlに追加する必要があるもの:

_security_login_special:
    pattern:  /special/login
    defaults: { _controller: FOSUserBundle:Security:login }

_security_check_special:
    pattern:  /special/login_check

_security_logout_special:
    pattern:  /special/logout

また、general_areaに別のロールを追加する必要があるため、FOSUserManagerをオーバーライドして、ユーザーの読み込み時にこの補足ロールを追加する必要があります...(詳細はこちら:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2。 0 / Resources / doc / user_manager.md

于 2012-04-15T23:27:56.767 に答える