Symfony 2:多个登录页面,多个防火墙

时间:2014-04-14 21:04:09

标签: php symfony

我的应用程序有两个登录页面 - 一个用于前端用户,另一个用于管理员。

我有一个自定义身份验证提供程序,我想用它们。这是我的代码:

firewalls:
    admin_area:
        pattern:    ^/admin
        anonymous:  ~
        form_login:
            check_path: /admin/admin_login_check
            login_path: knetik_admin_user_login
        logout:
          path:   knetik_user_logout
          target: _welcome
          invalidate_session: true
          handlers: [ knetik.authentication.logout.listener ]
        context: my_context

    secured_area:
        pattern:    ^/
        anonymous:  ~
        form_login:
            check_path: /admin/login_check
            login_path: knetik_user_login
            remember_me: true
        logout:
          path:   knetik_user_logout
          target: _welcome
          invalidate_session: true
          handlers: [ knetik.authentication.logout.listener ]
        knetik_auth:
          remember_me: true
        remember_me:
          key:      "%secret%"
          lifetime: 2232000
          path:     /
          domain:   ~
        context: my_context

access_control:
    # - { path: ^/, roles: ROLE_USER, requires_channel: http }
    - { path: ^/admin, roles: ROLE_ADMIN }

这给我一条错误信息:

2InvalidConfigurationException: Invalid configuration for path "security.firewalls.admin_area": The check_path "/login_check" for login method "knetik_auth" is not matched by the firewall pattern "^/admin/".

想知道是否有人遇到过类似的问题?

2 个答案:

答案 0 :(得分:0)

这是我的项目security.yml文件可能会给你一些参考:

security:
    encoders:
        myBundle\Service\WebserviceUser: plaintext
        entity_admin:
            class: My\Entity\Administrator
            algorithm: sha1
            iterations: 1
            encode_as_base64: false

    providers:
        entity_admin:
            entity:
                class: myBundle\Entity\Administrator
                property: username
        provider_members:
            id: my_custom.service.user_provider//this is my customized user provider

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

        admin_secured_area:
            pattern: ^/admin
            provider: entity_admin
            anonymous: ~
            form_login:
                login_path: /admin/login
                check_path: /admin/login_check
            logout:
                path:   /admin/logout
                target: /admin

        members_secured_area:
            pattern: ^/
            provider: provider_members
            anonymous: ~
            form_login:
                check_path: /login_check
                login_path: /login
                remember_me: true
            remember_me:
                key:      "%secret%"
                lifetime: 31536000 # 365 days in seconds
                path:     /
                domain:   ~ # Defaults to the current domain from $_SERVER
            logout:
                path:   /logout
                target: /

    access_control:
        admin_login:
            path: /admin/login
            roles: IS_AUTHENTICATED_ANONYMOUSLY
        admin_area:
            path: ^/admin
            roles: ROLE_ADMIN
        members_login:
            path: /login
            roles: IS_AUTHENTICATED_ANONYMOUSLY
        members_area:
            path: ^/
            roles: ROLE_USER

答案 1 :(得分:0)

要在symfony 2XX中实现多次登录,请尝试以下代码

Security.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        Company\AngularBundle\Entity\User: plaintext
        Company\AngularBundle\Entity\Admin: plaintext

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

    providers:
       users:
           entity: { class: CompanyAngularBundle:User, property: username }
       admin:
           entity: { class: CompanyAngularBundle:Admin, property: username }

    firewalls:
        admin_secured_area:
            pattern:   ^/admin
            anonymous: ~
            provider: admin
            form_login:
                login_path: /admin/login
                check_path: /admin/login_check
                default_target_path: /admin

        user_secured_area:
            pattern:   ^/
            anonymous: ~
            provider: users
            form_login:
                login_path: login
                check_path: login_check
                default_target_path: /home

的routing.yml

login_check:
    path: /login_check
admin_login_check:
   path: /admin/login_check

Twig文件

Action of login form should be like this
<form action="{{ path('login_check') }}" method="post">

Action of admin/login form should be like this
<form action="{{ path('admin_login_check') }}" method="post">