3

我是 Symfony 2 的新手,以前从未使用过任何框架。

我创建了 2 个捆绑包,一个用于核心站点,其 url 为 root /DefaultBundle然后我创建了一个新包UserBundle并将所有路由设置/user/为登录页面/user/login,它工作正常。

到目前为止,我能够登录用户并且一切似乎都正常。

真正的问题是,我如何检查DefaultBundle用户是否已登录,所以我在前端网站的右上角显示它们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

解决了

要在两个防火墙之间共享身份验证,请使用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

您将需要两个捆绑包的路由位于同一防火墙之后$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 回答
0

您可以在此处的 dosc 中找到它。

{% 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_routelogout_route满足您的应用程序的路线。

为什么不想使用 FOSUserBundle?这是一个非常好的捆绑包,由核心成员编写,例如,您可以在此处找到此代码。

于 2012-11-08T14:31:34.777 回答