3

私は Symfony 2 を初めて使用し、これまでフレームワークを使用したことがありません。

/2 つのバンドルを作成しました。1 つは URL がルートであるコア サイト用で、DefaultBundle次に新しいバンドルを作成し、ログイン ページUserBundleへのすべてのルーティングを設定しましたが、正常に動作しています。/user//user/login

これまでのところ、ユーザーにログインでき、すべてが機能しているようです。

問題はDefaultBundle、ユーザーがログインしていることを確認するにはどうすればよいかということです。そのため、フロント エンド Web サイトの右上にあるリンクWelcome Userの代わりにそれらを表示します。login/register

ps答えとしてFOSuserBundleは必要ありません。

以下は私のsecurity.ymlファイルからのものです

jms_security_extra:
    secure_all_services: false
    expressions: true

security:
    encoders:
       Aala\Vital\UserBundle\Entity\User: 
          algorithm: plaintext
#              encode_as_base64: false
#              iterations: 1

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

providers:
    user_area:
      entity: {class: AalaVitalUserBundle:User, property: email}

firewalls:

    login:
        pattern:  ^/user/login$
        security: false
        anonymous: true

    user_area:
        pattern:    ^/user
        form_login:
            login_path: /user/login
            check_path: /user/login_check
            post_only: true
            default_target_path: /user/
        logout:
            path:   /user/logout
            target: /user/

    main:
        pattern: ^/
        security: true
        anonymous: ~


access_control:
    - { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/user, roles: ROLE_USER }

私のフォルダ構造は次のとおりです

-src
    -Aala
        -Vital
            -FronendBundle
            -UserBundle

編集:

これは依存性注入で行うことができますか? はいの場合、それを行う方法...

4

4 に答える 4

2

解決しました

2つのファイアウォール間で認証を共有するには、を使用しますcontext。以下は私のsecurity.ymlファイルから更新されたファイアウォールセクションです

firewalls:

    login:
        pattern:  ^/user/login$
        security: false
        anonymous: true

    user_area:
        pattern:    ^/user
        context: primary_auth
        form_login:
            login_path: /user/login
            check_path: /user/login_check
            post_only: true
            default_target_path: /user/
        logout:
            path:   /user/logout
            target: /user/

    main:
        pattern: ^/
        context: primary_auth
        security: true
        anonymous: ~
于 2012-11-11T06:20:47.340 に答える
0

コントローラーのドキュメントによると:

http://symfony.com/doc/current/book/security.html#retrieving-the-user-object

public function indexAction()
{
    $user = $this->getUser();

    if($user->isAuthenticated()) {
        // Stuff
    }
}
于 2012-11-08T14:24:37.367 に答える
0

こちらのドキュメントで見つけることができます。

{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
    {{ 'Welcome ' ~ app.user.username }}
    <a href="{{ path('logout_route') }}">Logout</a>
{% else %}
    <a href="{{ path('login_route') }}">Login</a>
{% endif %}

お申し込みのルートに合わせて変更login_routeしてください。logout_route

FOSUserBundle を使いたくないのはなぜですか? これは非常に優れたバンドルであり、コア メンバーによって作成されています。たとえば、このコードはここで見つけることができます。

于 2012-11-08T14:31:34.777 に答える
0

機能するには、両方のバンドルのルートが同じファイアウォールの背後にある必要があります$user = $this->getUser();。次に、サイトの特定の部分を非認証にしたい場合は、ACL を使用して匿名アクセスを許可できます。

firewalls:
    site:
        pattern:    ^/
        anonymous: ~
        form_login:
            login_path: /user/login
            check_path: /user/login_check
            post_only: true
            default_target_path: /
        logout:
            path:   /user/logout
            target: /user/

access_control:
    - { path: ^/user/, roles: ROLE_USER}
于 2012-11-08T14:29:16.977 に答える