FOSUserBundle:奇怪的身份验证

时间:2011-11-30 17:18:03

标签: php symfony

我正在使用Symfony2进行项目,您必须登录才能看到该网站。我正在使用FOSUserBundle来创建成员区域。这是一个想法:如果匿名者来到网站,我会系统地重定向到登录页面。

这是我的security.yml:

providers:
    fos_userbundle:
        id: fos_user.user_manager

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

    login:
        pattern:   ^/(login$|register|resetting)  
        anonymous: true                           

    main:
        pattern: ^/                      
        form_login:                      
            provider:    fos_userbundle  
            remember_me: true            
        remember_me:
            key:         %secret%        
        anonymous:       true            
        logout:          true            


access_control:
    - { path: ^/backoffice, roles: ROLE_ADMIN }
    - { path: ^/, roles: ROLE_USER }

我认为没有理由不去工作;这是现在的问题。我观察到我在/ login和其他区域没有记录相同的内容。例如,如果我自己登录,那么我就是名为“admin”的用户,网站上的角色为“ROLE_USER”但是如果我去/登录,我就会记录为“anon”而根本没有任何角色。 同样的问题但更无聊:当一个新用户注册时,他登录/登录页面而不登录其他页面......所以他总是重定向到/ login并且注销不会改变任何东西。 :/

你有什么想法吗?

谢谢!

P.S。 :是否可以手动清除Symfony2中的所有会话?因为我希望能够尝试其他东西但是在Chrome中我暂时无法做任何事情......我尝试清除浏览器缓存和cookie,清除Symfony缓存等等......没有任何变化,我是仍然在/ login页面上以“admin”身份登录-_-

1 个答案:

答案 0 :(得分:1)

问题是你只为主防火墙指定了fos_userbundle提供程序,而不是登录和开发防火墙。所以fos_userbundle根本不用于/登录页面。

documentation表示您应该使用此配置:

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            remember_me: true            
        remember_me:
            key:         %secret%        
        logout:       true
        anonymous:    true

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/backoffice, roles: ROLE_ADMIN }
    - { path: ^/, roles: ROLE_USER }